-
-
Notifications
You must be signed in to change notification settings - Fork 404
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Data API #284
Conversation
Just a quick note about |
One other thing to do after the merge: we should migrate |
Ok, all tests are green! Time to merge... |
Data API for flexible data manipulation and access
Yay! Good work, guys! |
Is there an issue open elsewhere that lists blockers for the next release, now that this has been merged? |
There's this milestone https://github.com/ioam/holoviews/milestones/v1.4.0. Out of those, the following should be a quick fix (<1 hour each):
These are issues where we simply have to come to a decision:
These are items that might require a bit more work:
Then there's getting the build process streamlined and improving the docs:
|
Out of those, the following should be a quick fix (<1 hour each):
Those all seem worth fixing, though the Arrows one might not be urgent.
Well, you know my opinion on QuadMesh, so you two can be the deciding
The last two seem a bit dangerous to add just before a release; seems like
These last three seem safe to postpone until after a release; important Apart from DynamicMap, the rest sounds like it adds up to a solid day's |
DynamicMap needs to be done as another PR. The basics are already working but we need to be careful that the design allows for the sort of interaction we really want (callbacks feeding information such as mouse position to the DynamicMap via something we have called Streams). I am happy to work on that aspect which shouldn't take too long. The part I would have more difficulty with is the JavaScript side - we need a flexible caching system that supports 1. no caching 2. LRU 3. caching every nth frame. This is important for reproducibility and export as the caching determines what you get when exporting a DynamicMap to a regular HoloMap. For this, Philipp would need to suggest how long this would take to implement (I think this could be easy, LRU which accepts 0 or infinite frames together with an integer modulo i.e two parameters could do the job reasonably well). |
Sounds like DynamicMap should be released, since it's very useful and urgently needed, but marked experimental in the release notes since we're still polishing it. For caching, seems like you do need some support, but that can be part of what's marked experimental, and we can tune it later. To me it seems like we do need at least two parameters:
This still leaves it undefined what happens when the limit in 1 is reached -- should it start deleting LRU, or start decimating frames? We should probably just pick one behavior and leave it unconfigurable (at least for now), because if we started to add parameters to control it people would get confused between those option-1 parameters and those for option 2 (which is independent of option 1's limits). |
This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
While not yet ready to be merged this PR will implement the proposals laid out in #269. I'll reproduce the main points of discussion here and outline a to-do list.
The core of the proposal is to add a core
Columns
Element class, which subsumes the functionality of theChart
,DFrame
andNdElement
classes. This will allow a wide range of Element classes to interchangeably use one of three data formats:This would mean the Curve, Points, VectorField, Bars, Table, ErrorBars, Spread, Scatter, Scatter3D, Trisurface, Distribution, TimeSeries and Regression Elements would immediately support all three data formats.
The data format specific implementations of the API are implemented on utility classes, this will include:
__getitem__
but works for one or multiple dimensions.and conversion methods, which can take an optional flag to return a clone of the Element with converted data:
Backwards incompatible changes:
ItemTables
, the variable return type is confusing and makes the implementation very messy. All operations (select, reduce, sample) return one of two types of data either a modified Columns object or a single scalar.Other features:
__getitem__
method will now check whether the first or n-th index (where n is the number of key dimensions) matches an existing dimension by name, allowing the user to select particular columns. Passing a dimension as a first index will return the values along that dimension, this matches the behavior of DataFrames and will allow us to provide an easy interface for more complex Boolean slicing, e.g.:columns[np.logical_or(columns['x'] > 5, columns['y'] > 10)]
. Passing a dimension as the n-th index preserves the current behavior when slicing tables, allowing you to select a particular value dimension. If the non-key indexes don't match any existing dimension they are used to slice along the vdims.One of the major sticking points is how the constructor should behave for different data formats, currently this is the implemented behavior showing the mapping between an input type and the storage format that's used (some come with fallbacks if a certain condition isn't met):
The current to-do list is as follows:
Improvements to plotting:
That covers it for now. I won't have any time to work on this in a concentrated way so I'll be slowly ticking off the to-do list as I find time. In the mean-time we can think about the naming.
Documentation and notebooks: