- [lab] fix regression introduced when interacting with jupyter-collaboration autosave;
- [kernel] handle binary ops in liveness checker;
- [kernel] improve precision of timestamp updates for mutation handlers;
- [kernel] turn off tracing for InteractiveShell API;
- [kernel] improve edge precision around nested symbols;
- [kernel][lab] improve accuracy of readiness;
- [kernel][lab] improve accuracy of pull-based reactivity;
- [kernel] integration with mercury widgets;
- [kernel] improve accuracy of static write detection;
- [lab] Reactivity by default (!!!)
- [lab] Improvements to reactive execution engine: update stale / dirty dependencies as well;
- [lab] Initialization improvements after kernel is started / restarted;
- [lab] Use a more a11y-friendly color scheme by default;
- [lab] Support any-order execution semantics in batch reactive mode;
- [kernel] Add a reproduce_cell API helper function;
- [kernel] Better static edge detection / removal;
- [kernel] Improvements to %%memoize magic (--verbose and --quiet specifiers);
- [kernel] Improvements to resync logic if tracing disabled;
- [kernel] Fix multithreading bug;
- [kernel] Support NoneType as a subscript type;
- [kernel] Misc stability improvements and bugfixes;
- [kernel] Add experimental %%memoize magic;
- [kernel] Many bugfixes and other misc improvements;
- [lab] Bugfix for run-cell-and-select-next;
- [lab] Bugfix for execution of non-code cell types;
- [lab] Support both JupyterLab 3 and 4;
- [kernel] Start getting kernel ready for autoreload integrations;
- [lab] Reactive running also refreshes ready parents of dependencies;
- [kernel] Fix Colab kernel incompatibility;
- [kernel] Misc bugfixes;
- [kernel] Add another comm handler for last_updated_cell_id;
- [kernel] Add a couple more comm handlers;
- [kernel] Allow reactivity_mode to be configured on client initialization;
- [kernel] Improve compatibility with other interfaces;
- [lab][kernel] Persist dependency DAG across restarts;
- [lab] Continuous file sync for cell input content changes;
- [lab] Bugfix for clearing [*] in case where intitial cell in reactive chain threw an error;
- [kernel] Improve loop performance;
- [kernel] Improve accuracy by expanding cases for tracing reenablement;
- [kernel] Misc bugfixes;
- [lab] Add batch reactivity_mode and make it the default (previously was incremental);
- [lab] Add slice indicators to the left of cell counters;
- [lab] Fix bug related to syncing dirty cell indicator to dirty state after paste;
- [lab] Add ctrl / cmd + j, k for execute forward, backward slices, respectively;
- [kernel] Enable debugger support;
- [kernel] Provide a ipyflow-based TerminalInteractiveShell launchable via 'ipyflow' on the command line;
- [kernel] Fix bug wherein tracing wasn't totally disabled in line magics;
- [kernel] Fix bug wherein statement dependencies would not be updated for cells that react to later versions of an updated slider;
- [kernel] Make sure ipython also captures static dependencies;
- [kernel] Various minor bugfixes;
- Set consistent comm ids when APIs permit;
- Small improvements to reactivity semantics;
- Hopefully fix deps for conda-forge;
- Fix scrolling functionality in slicing widget for jupyterlab>=4;
- Fix bug that allowed attempted usage updates to symbols with uninitialized timestamps;
- Allow activation of frontend features via %load_ext ipyflow (even on ipykernel);
- Scope frontend state to session;
- Fixes for various corner cases around page refresh;
- Fix potential bug in nest_asyncio patching;
- Workaround for jupyter_core asyncio bug;
- Jupyter server extension to enable aforementioned workaround;
- Stop pinning requirements thanks to aforementioned software workarounds;
- Fix alt mode execute when reactivity is default;
- Future proofing in anticipitation of Notebook 7 / JupyterLab 4.0;
- Fix _stack_depth issue on run_line_magic function;
- Fix issue around spurious edge introduction for previously executed parent;
- Always get freshest variable references during analysis and fix resulting reactivity bugs;
- Bugfix for restart / run all;
- Bugfix for IPython version
- Unify dependency management for statements and cells;
- Bugfix for correct active cell use during nbextension active cell run;
- Fix IPython dependency for different Python versions;
- Allow exec schedule recomputation on cell content change;
- Add API for symbol tagging;
- Code HTML widget with links for jumping to cells / copying slice;
- Misc other bugfixes;
- Allow for loading / unloading as an ipython extension;
- Bugfix for nbextension active cell notification;
- Bugfix for kernel change state transition logic in nbextension
- Even better behavior around dependency tracking between cells;
- Bring nbextension to parity with labextension mostly;
- Misc stability improvements around kernel switching / restarting;
- Better behavior around dependency tracking between cells;
- Use proper input transformation for ipython syntax extensions during checking;
- Fix initialization race that caused execution to hang sometimes;
- Bugfix for hybrid dag liveness;
- Better support for backward slicing with ipywidgets;
- Support profile-based configuration;
- Slicing improvements for external calls that update module state;
- Misc bugfixes;
- Basic integration with %%capture magic;
- Improve ipywidgets integration;
- Support periodic content notifications to kernel;
- Ensure override_live_refs are included as static parents for dag scheduling;
- Misc bugfixes around cascading reactivity;
- Misc other bugfixes;
- Hide verbose / developer logging behind an environment variable shared with pyccolo;
- Improved ipywidgets integration;
- Misc bugfixes and improvements;
- Better handling of static / dynamic parents when out of order cell deps detected;
- Reactive state improvements;
- Bugfix for deadness detection;
- JupyterLab cmd+shift+enter hotkey for reactive / alt mode execution;
- Improve comprehension behavior;
- Improve garbage collection;
- Trace-once semantics for comprehensions;
- Misc liveness analysis improvements;
- Misc other bugfixes;
- Revert previous change;
- Distinguish between cascading / non updated reactive symbols;
- Treat attrsub value as live during nested symbol assignment;
- Another bugfix around reactive / cascading reactive modifiers;
- Bugfix that allows new threads to be spawned more reliably;
- Better handling around reactive / cascading reactive modifiers;
- Better handling around readiness computation for hybrid liveness / dag scheduling;
- Bugfixes around reactivity-blocking syntax extension;
- Integration for ipywidgets;
- Remove restriction on ipython version;
- Couple of minor bugfixes;
- Relax gc thresholds to improve perf;
- Improved support for Modin dataframes;
- Better handling of namespace symbol contributions to slices;
- Pin pyccolo to 0.0.39 exactly prevent forward compat issues;
- Fix a couple of hybrid-liveness-dag issues / corner cases;
- Stop reactive execution when exception is encountered;
- Use liveness_based exec_schedule for classic notebook frontend;
- Use pyccolo >= 0.0.39 for better syntax augmentation;
- Disable tracing during magics;
- Disable tracing below a certain call depth of external code;
- Infinite recursion corner case hotfix;
- Better handling for _ symbol;
- Cinder failsafe in symbol resync;
- Use non-ipyflow execution path for empty cells;
- Improve DAG scheduler with symbol info on edges;
- Add hybrid DAG + liveness based exec schedule and make default;
- Fix upsert_symbol stmt number bug;
- Allow comm open message to set configuration;
- Actually fix cyclic waiting check bug;
- Bugfix for cyclic waiting check;
- Only process previously-executed cells by default;
- Make core api functions directly importable from ipyflow;
- Configurable reactive highlights;
- Use typescript 4.3.5 (compatible with JupyterLab 3)
- Update logos;
- Misc fixes;
- Add call symbols as deps during namespace unpack assign;
- Improved handling / tolerance around execution counters;
- Bugfixes for call scopes and symbol tables (better global / nonlocal handling);
- Bugfix to get working on Python 3.11
- Scaffolding for watchpoint functionality;
- stderr / stdout API functions for accessing cell outputs;
- Bugfixes around module usage and timestamps;
- Small bugfix to ensure import statements kill symbols during liveness analysis;
- Small bugfix for dependency inference in attributes / subscripts;
- Fixes and improvements for dataflow annotation dsl;
- Api methods for (r)deps, (r)users, timestamp, code
- Allow ImportFrom to kill symbols during static analysis;
- Important bugfixes;
- Misc bugfixes;
- Improve code for external call handlers;
- Better handling for module symbols;
- Misc bugfixes;
- Bump pyccolo to a version with perf improvements for imports;
- Lazily import mutation special case modules;
- Fix more versioneer issues;
- Keep ipyflow and ipyflow-core versions in lock-step;
- Fix some versioneer issues;
- Fix a bug related to readiness for in-order semantics;
- Add comm handler for refresh symbols;
- Add comm handler for upserting symbol;
- Add comm handler for registering dynamic comm handlers;
- Make comm handlers all send at least an ack response;
- Disable syntax transforms for magic cells;
- Allow syntax transforms to be toggled via a magic;
# Exclude garbage symbols from user-accessible;
- Make cascading reactivity also work for not-yet-executed cells;
- Treat cells with non-resolvable live refs as waiting;
- Make in_order semantics the default;
- Model unexecuted cells as well as executed ones;
- Add get_code magic;
- Stdout / stderr tee utilities delegate non-critical attributes;
- Fix serialization bug that prevented in-order semantics from working properly;
- Add ability to register custom comm handlers;
- Fix lazy import ImportError issue (possibly manifesting on cinder);
- Add api package with 'lift' function for resolving argument to DataSymbol;
- Fixes for pyccolo 0.0.28 breaking changes;
- Add optional capability for linting unsafe order usages;
- Add line magic to run with syntax transforms only, and no tracing;
- Properly pass call_scope and function definition nodes between aliasing symbols;
- Cascading reactivity for namespace symbols;
- Reactivity works for dirty cells;
- Change scheduling nomenclature + line magics (safety -> flow);
- Fixes for pyccolo 0.0.22 breaking changes;
- Add out-of-order warnings for strict / in_order semantics;
- Upsert both df["col"] and df.col for pandas dataframes;
- Misc js security fixes;
- Skip static checking when dataflow tracing not enabled;
- Minor bugfix for dynamic slicing with tuple assignment;
- Use ipython<8.0.0 for performance reasons, pending further investigation;
- Start factoring out pyccolo-specific stuff into the kernel subclass for generic use later;
- Add register / deregister subcommands for other Pyccolo tracers;
- Keep tracing context active between cell executions;
- Use pyccolo for instrumentation;
- Fix to not crash on immediately-called lambdas during analysis;
- Implement reactive symbols;
- Separate concept of 'schedule' from flow order;
- Add experimental dag and strict schedules;
- Misc bug fixes;
- Improve detection of whether cell is newly fresh;
- Expose in-order and any-order flow semantics via line magic;
- Fix regression that caused kernel to crash on syntax errors;
- Get rid of accidental debug logging statement;
- Fix state transition bug where current scope not restored;
- Make checker results strongly typed;
- No more warning for stale usages; just show the highlight;
- Various fixes to reduce intrusiveness (no attribute / subscript dereferencing at check time);
- Bump frontend dependencies to more secure versions;
- Misc bugfixes and improvements;
- Fix bug where function scope overridden on redefinition;
- Handle global / nonlocal state;
- Get rid of unnecessary frontend dep, thereby fixing retrolab compat issue;
- Misc bugfixes and improvements;
- Ignore mutating calls when determining fresh cells;
- Experimental reactivity prototype;
- Improve loop performance by better enforcing trace-once semantics;
- Bugfix for stack tracking when tracing reenabled;
- Add exceptions for general mutation rules;
- Fix return transition when first call happens outside notebook;
- Shuffle namespace symbols from old to new when namespace overwritten;
- Improved slicing via timestamp-augmented liveness analysis;
- Bugfix to dedup slice computation;
- Bugfix to avoid resolving null symbol;
- Bugfix for improper class namespace registration;
- State transition bugfix for return from ClassDef;
- Misc improvements to mutations;
- Improved bookkeeping for list insertions / deletions;
- Minor logging fix;
- Minor no-op detection fix;
- Minor security fixes in npm packages;
- Actually fix nbclassic bug;
- Slight improvement to the lineno -> FunctionDef mapping (fixing some bugs);
- Fix nbclassic bug;
- Hotfix for issue creating call arg data symbols;
- Security audit;
- Various bugfixes and usability improvements;
- Fix packaging issue;
- Better handling for deletes;
- Reduce false positive highlights when updated symbol unchanged;
- Use new-style labextension, obviating need for separate jupyter labextension install ... command;
- Major improvements and bugfixes for lineage involving list, tuple, dict literals;
- Improvements to granuarity of dependency tracking for function calls;
- Improvements to dynamic symbol resolution;
- Improved handling for @property getter / setter methods;
- Fix some spurious warnings;
- Bugfix for statements involving del;
- Various tracing improvements;
- Bugfix for tuple unpacking;
- Various tracing improvements;
- Various analysis improvements;
- Fix for stack unwinding bug during trace reenabling;
- Propagate freshness to namespace children;
- Make jupyterlab a requirement;
- Fix pandas perf issue and other minor improvements;
- Forgot to remove print statement;
- Fix bug wherein non loop vars killed in comprehensions;
- Significant stability improvements;
- Remove altered Python logo to comply with PSF requirements;
- Only trace lambda call the first time during a map for performance;
- Faster computation of refresher cells by creating "inverted index" based on reaching defs;
- Reduce false positives in liveness checker;
- Improve dependency tracking for tuple unpacking assignmengs;
- Explicitly add kernel.json to data_files in setup.py;
- Debug absent kernel.json when installing with pip;
- Bundle nbextension and auto-install at setup (along with kernel);
- Bugfixes;
- Efficiency compromise: don't trace multiple executions of same ast statement (e.g. if inside for loop);
- Fix bug where errors thrown when unimplemented ast.Slice or ast.ExtSlice encountered;
- Fix bug where assignment with empty rval could lead to version not getting bumped in provenance graph;
- Accidental version release while automating build process;
- Bugfix for setting active scope correctly during ast.Store / AugStore context;
- Use versioneer to manage versioning and add bump_version.sh script;
- Bugfix: if returning from function, only pass up rvals if the ast statement is ast.Return;
- Handle dependencies from one level of lambda capture properly;
- Fix not-displayed visual refresh cue for cells that threw exceptions to be refreshed if input contains an updated symbol;
- Support fine-grained dependency edges for tuple unpacking for simple (non attribute / subscript) symbols;
- Bugfixes for args inside of nested function calls as well as for multiple inline function calls (eg f()());
- Code quality improvements;
- Fixes to properly reference live args and kwargs inside of calls involving attributes and subscripts;
- Major bugfixes and improvements to the attribute / subscript tracer;
- Improvements to the logic for only propagating staleness past cell boundaries;
- Major bugfixes and improvements to dependency tracking;
- Fix bug that prevented attribute / subscript tracing on Python 3.6.
- Minor usability improvements;
- Bugfixes; improve propagation of updated dependencies along namespace hierarchies;
- Bugfixes; version npm package and PyPI package in lockstep;
- Add front-end labextension to highlight stale and refresher cells;
- Give up on post installation of kernel spec and try to include resources dir in package;
- Resort to hacky atexit command register call to facilitate post install script for kernel;
- Give up on bdist_egg;
- More hacks to try and install kernel spec as post install script (switch to egg + use manifest);
- Hack to try and install kernel spec as post install script;
- Add logo;
- Support AnnAssign (i.e. assignment with type annotations);
- Increment cell number if precheck failed;
- Increment cell numbers properly with %safety magic; other minor bugfixes;
- Minor stability fix;
- Don't require pandas;
- Fix issue detecting completion of statement with calls inside of comprehensions;
- Add workaround for weird pandas attributes;
- Handle simple mutation deps for method calls (simple ast.Name args are added as deps);
- Fix bugs related to attr resolution for class attributes and add functionality to handle basic aliasing / mutation;
- Fix cornercase bug for objects without __dict__ attribute (such as dictionaries);
- Refresh nodes w/ stale deps upon user override to avoid multiple of same warning;
- Readme formatting for PyPI;
- Readme formatting for PyPI;
- Rename kernel from python3-nbsafety to nbsafety;
- Misc bug fixes;
- Misc bug fixes;
- Fix kernel install commmand for Windows;
- Initial internal release supporting basic features of Python;