* maybe truncate string
* add string formatting to test
* correct import
* destructuring
* add maxlength
* test
* Respond to feedback from @bkmartinjr
Co-authored-by: Matt Weiden <538456+mweiden@users.noreply.github.com>
* first cut at re-embedding route and back-end support
* update and expand config route tests
* add scanpy_umap
* add reembedding to config route parameters
* front-end support for reembedding fetch and UI
* remove unused imports
* add loading state
* save reembedding in reducer state
* improve withColsFrom
* transmit reembed schema to client; pick unique embedding names
* display embeddings
* format
* lint
* spaces, tab size 2
* lint
* test hack for smoke-test race
* back out hack sleep
* add check for backed mode
* add unit test for reembedding
* lint
* hide re-embedding CLI param from help
* Remove unused variables and imports
* Simplify conditional
* Fix typo
* Do not overprune var data cache
There is a bug in how the universe and world gene sets are constructed
and passed to `ControlsHelpers.pruneVarDataCache` that causes the var
data cache to be over-pruned. This commit fixes the issue.
Consider the following example from the node console:
```
❯ node
Welcome to Node.js v13.5.0.
Type ".help" for more information.
> new Set([1], [2], [3])
Set(1) { 1 }
```
What we really want is the set `Set(3) { 1, 2, 3 }`, which can be
constructed as:
```
> new Set([].concat([1], [2], [3]))
Set(3) { 1, 2, 3 }
```
* Disable ColorBy button for truncated categories
Fixes https://github.com/chanzuckerberg/cellxgene/issues/1156
For categories that have more than 100 labels we truncate the labels in
the UI, but still allowed users to ColorBy these categories. Coloring by
these categories can cause browsers to get bogged down.
This commit disables ColorBy for truncated categories.
* Minor documentation spelling and typo fixes
* Respond to feedback from @liaprins-czi
* Respond to feedback from @colinmegill and @bkmartinjr
* Undo selection appends diffExp genes to user gene list
Fixes https://github.com/chanzuckerberg/cellxgene/issues/1171
Need: When a user performs a differential expression from within
a sub-selection (world) of the data and then resets the selection to all
cells (universe), the differential expression results are no longer
valid.
Approach:
* When the selection is reset, move the top (maxUserDefinedGenes
- len(userDefinedGenes) from the differential expression results to the
list of user defined genes
* Raise maxUserDefinedGenes to 25 to give users more room and
accommodate the extra genes transferred in from differential expression
Other commits:
* Choose different button icons
* Add diff exp genes to user defined genes on subset too
* Respond to feedback from @liaprins-czi and @bkmartinjr
* add simple error message helper
* port all label name pickers to use the new LabelInput component
* use pure components where possible
* cleanup
* more cleanup
* lint
* change new label prompt
* Add smoke test for annotations features
* Do not save during annotations tests
* Fix botched rebase in dev guidelines
* Revert "Do not save during annotations tests"
This reverts commit f0bd970bb2.
* Respond to feedback from @bkmartinjr
* load annotations individually
* fix type check to be more general
* update node CI version from 10 to 12
* node 11
* debug print node version
* travis node version to latest
* try nvm
* remove extraneous node_js statement
* remove node version debugging printf
* incrementally load all annotations and layout
* process annotations and layout as they are loaded
* fix tests
* sort categories incrementally
* incrementally build category view summary; add category loading spinner
* add spinner to continuous metadata
* configure undoable reducer
* incremental crossfilter creation
* improve busy layout
* more layout cleanup
* correctly reconcile categories in schema
* refine layout of lsb spinners
* more spinner layout work
* more spinner layout
* always load layout before obs annotations
* add sample ontologies file
* add ontologies reducer
* Move select category to own component
* Dialog and Input factored out
* refactoring categorical, partway
* validationn
* anno
* suggest populates input
* frontend for ontology working
* initial implementation of back-end support for ontologies
* edit is now dialog again
* autosuggest working on edit
* part way through create arbitrary label
* handle choice in function
* pass duplicate cat prop
* editing works
* update test to match new CLI params
* fix occupancy alignment
* edit category as dialogue
* secondary button
* remove stubbed out ontologies
* add label setting upon new label creation
* Update legal characters for labels (#1119)
* Allow any term in the ontology (bypass legal name check)
* Add hyphens and parens to legal characters in names
* improve performance for large ontologies
* correctly handle case where ontologies are disabled
* fix logic error in CLI
Co-authored-by: Bruce Martin <bruce@chanzuckerberg.com>
* PR cleanup 1
* lint
* validate user generated labels
* finish hooking up connected suggest component
* protect against undefined callbacks
* Fix illegal characters error message
* break out npm run commands
* fix error detection on label edit
Co-authored-by: Bruce Martin <bruce@chanzuckerberg.com>
Co-authored-by: Sidney Bell <sidneymbell@users.noreply.github.com>
* refactor reducer to no longer support hover state and hold many labels
* refactor to generate centroidCoordinates for all values of a category
* create hash for function and memoize export
* create button to display all labels for a category
* clear state
* create label for each thing
* calculate on each value
* change to in place modification of map
* switch to for loop with iterator instead of forEach
* use map from centroidLabel instead of creating copy
* adapt for map
* utilize tarrays
* begin documentation
* disable centroids if in zoom mode
* clean up
* persist uncalc coordinates
* document
* clean up and document
* cleanup and document
* fix
* fix undefined labels and document changes
* fix first element skip
* fix conditional recalc
* rename centroidLabel -> centroidLabels
* break out dilation on hover to new reducer
* numerous styling changes for readability
* change centroid icon
* remove colorAccessor from parameters
* recalc centroids on world change
* make label toggle undoable
* remove unused import
* highlight labels on hover
* remove special characters from svg id
* lighten backdrop
* only generate new centroids if they pre-exist
* fix issue with spaces in catagorical value name
* add label buttons to menubar
* change reducer to use colorAccessor and have single toggle
* fix check to see if svg should be rendered
* move svg overlays onto a single svg layer
* dilate on label hover
* remove logs
* allow centroid to update along side regl renders
* allow actions to pass through svg if in zoom mode
* remove artifact from circle
* remove comment
* remove disabling of centroid button
* fix conditional map to screen
* make styling label conditions stricter
* prettier
* refactor onto master
* refactor computePointFlags() to use pointDilation store
* notify when viewport changes
* move svg attributes out of lasso setup and prevent rerenders/writes
* begin playing with transform matrix
* first solution for camera interaction
* create transform using nested groups
* semi-working method using nested groups with transforms
* inversely scale text
* properly do final transform
* cleanup dead / test code
* reinstate original functionality
* breakout centroid labels labels into separate component
* default toggle on for testing
* separate lasso and centroid layers
* remove unnecessary attributes, working hover
* dilation on label hover
* fix dilation on scatterplot
* add dilation on label hover
* break overlay into separate component
* make overlay agnostic to children
* move label mouse actions to centroidlabels component, add overlay state
* remove lasso on switch to camera
* disallow user selection
* fix reducer
* fix subset with continuous color error
* reset labels on color by continuous
* revert centroids on by default
* refactor for nested restructuring
* remove update checking
* remove unused method
* readd deleted hover delay
* remove old centroid setup
* remove centroid from undoable
* cleanup dead code
* remove dead code
* rollback unnecessary changes
* begin adding annotation functionality
* add annotation functionality
* add reset and undo functionality
* change centroids on layout change
* don't create label for unassigned
* add comment pointing out POI for performance
* touch up matrix transform comment
* add comment explaining coordinate space and children's assumed space
* remove dead code
* switch to pure component
* connect centroidLabels to redux
* clean up camera check and null result
* tool tip change
* rename centroid toggle and the like
* fix the misalignment of buttons, also make blueprint use consistent
* fix comment spelling mistakes
* introduce variable for cleaner logic expressions and state assignment
* alter tooltip text to back color by interaction
* remove manual iterator manipulation for forEach()
* remove debounce
* nit fix
* tooltip wording fix
* lint
* rename config param label-file
* annotations rework - CLI params, file naming and backups
* lint
* improve cli option error checks
* enable session cookies
* enable session cookies
* add session id
* name annotations file in multi-dataset and multi-user safe manner
* pass data user hash to front-end
* add annotation collection name support to front-end
* add constant for annotation data collection name
* parameterize annotation collection name; make it sticky in the session
* clarify comments
* hard wire a temporary data collection name for testing
* prettier
* test comment
* package command
* set annotations filename dialog
* name and hash are visible
* wire up data collection capture
* cache common results to reduce jank
* add util function in support of annotation labelling
* enable/disable annotation edit menus per issue 972; improve formatting
* PR review requests
* freeze objects
* component rendering perf work
* use PureComponent where safe
* remove obsolete WorldUtil code
* make brushable histogram a pure component
* many graph/scatterplot fixes: 722, 882, 758, 886
* fix e2e test breakage caused by graph transform work
* convert webgl point shaders to use flags rather than explicit point size
* remove unused packages from dependencies
* fix typo in regl prop name
* factor common code into util helper file
* legibility tweaks
* add action to clear colorMode and colorAccessor if diffexp is removed
* create new colorHelper function
* creater colorHelper for conditionally setting state
* add abbr
* revert abbr
* comment
* add histogram functionality to Dataframe; port category occupancy to use it
* fix binning and create histogram for continous by catagorical
* Remove unnecessary logs
* Begin work on KDE
* Replace broken KDE with working histogram
* Define domain and range based on data from histogram
* Fix occupancy
* Add continuous obs and switch to canvas
* Stop value from always rerendering
* clear before render
* Clear canvas on render
* refactor categorical occupancy to canvas
* Remove log
* simplify finding max
* refactor kde->histogram and occupancy->bins
* refactor svg -> canvas
* rename to occupancy stack
* create popup
* add metadata and categorical values to popup
* fix overflow
* remove zeros info
* style graph
* fix shouldComponentUpdate to look for world changes
* change categorySelected -> categoryValueSelected
* refactor out render
* remove comment
* conditionally have bottom border
* remove diff comp
* remove comments
* remove unnecessary mapping
* Add comments describing drawing functions
* comments
* flip comparison order
* remove logging
* move default to parameter
* move defaults to parameter
* disable popover if not showing histogram
* fix wording and styling
* add line break
* Connect mouse over events to reducer actions
* Change Styling on hover
* Rename reducer actions to be more descriptive
* Reorder reducer in cascade
* Create centroid calculation util
* Whitespace
* Typo fix, use correct action
* Create centroid calc util
* Create centroid svg setup
* Refactor existing svg layer to toolSVG
* Change calcCentroid signature and centroidXY to match mapPointToScreen
* Add id and styling
* Run prettier
* Set z-index to 999
* Draw the label
* Introduce the centroid SVG, refactor code to allow both SVG layers
* Add text label and compute radius based on population
* Implement optional chaining
* Update font family
* Optimize calcMeanCentroid()
* Create and utilize calcMedianCentroid()
* Remove mass circle from label
* Remove styling change on hover
* Remove reducer action logs
* Prettier
* Swap out binds for arrow functions
* Style text
* switch from selectAll() to select()
* Reflect centroid container's purpose in id
* Remove mass from the output
* Swap to obj
* Add finite check
* Don't draw centroid if no finite values
* Fix finite check
* Remove log
* Toggle label coloring based on colorBy state
* Pass cursor events through centroid svg
* enforce column name uniqueness for obs and var
* parameterize the column name containing obs and var user-readable names
* use the new annotation index value from schema
* update f/e unit tests
* PR review suggestions
* lint
* change pan speed to 1 per issue #722
* correct handle scaling of graph when aspect ratio less than one
* add package lock
* add invert to our scale functions
* correctly transform to/from gl coordinates
* remove unused import
* fix naming of import
* update smoke tests
* add own range() function
* lodash cleanup
* remove redundant fill range implementations
* remove use of _.get
* sync test babel config with build
* update tests to match new range implementation
* Add numeric inputs for percentiles
* Define initial values for percentile cutoffs in world reducer
* add percentil to crossfilter dimensions
* worldEqUniverse now handles cloned worlds
* add Dataframe.mapColumns
* Wire up handlers for percentile inputs
* World reducer and stateManager know about continuousPercentileMin/Max
* Create world as universe clone (not pointer) to avoid clobbering vals
* Define basic actions for setting continuousPercentileMin/Max
* Under the hood, deal with percentiles between 0 and 1
* Move percentile inputs to visualization settings menu
* Fix padding for undo/redo buttons
* Trigger world rebuild from percentile actions
* BROKEN - pseudocode for clamping dataframe by percentiles upon world rebuild
* fix error handling on clip quantiles; start world clipping implementation
* more unclipped reorg
* rename crossfilter.percentile to quantile
* simplify schema access
* update continuous legend when scale changes
* update color cache when clip changes
* clip obs annotations and var data when clip quantile changes
* use own fromEntries
* fix tests
* stable non-finite float sort/search
* clarify comments
* fix syntax typo
* use new stand-alone clip
* clip expresssion data
* add select tests for non-finite scalars
* basic styles
* clip UI now requires explicit commit
* reset enable/disable accounts for clip percentiles
* better error messages
* fix bug in undo interaction with programatic min brush selection
* small refactoring
* support clipping of int data
* do not perform unnecessary summarizations
* improve caching of dataframe compiled columns
* add percentile precompute to Dataframe.summarize
* use Dataframe.summarize for clip percentiles
* remove obsolete quantile code from corssfilter
* histogram scale and label Y axis, add unclipped X range labels
* layout tweaks
* scatterplot now updates when clip changes
* improve comments
* remove debugging comment
* rework clip number entry validation for usability
* ui tweaks to histogram colors and layout
* enable undo/redo for clip user action
* refine UI on clip value entry
* api cleanup
* update confusing comment
* clarify purpose of isValidDigitKeyEvent
* fix misleading comment
* apply appropriate button-group classes; do not mix span and div
* variable name and comment changes suggested in PR review
* rename sort to sortArray; remove unused and dead code path
* naming changes suggested in PR review
* code review improvements for clarity
* more small changes from PR review
* lint fixes for PR review
* fix spelling error
* clarify that function performs in-place modification of world
* add comment to clarify intent of range operation
* fix bad indents in comments
* clean up __columnsAccessor comments and code
* improve comments around clipPredicate
* field name consistency
* improve comment on quantiles params
* save graph selection in redux state
* fix old graph brush select regressions
* refactor graph brush selection to work with undo/redo
* update tests to match new crossfilter spatial select API
* graph selection state now in redux
* remove dead code
* sync graph selection with redux state; improvements to undoable machinery
* fix regression in undoable
* differentiate graph selection cancel from deselect action
* simplify calculation
* remove debugging code
* fix responsive repaint bug in graph selection tool
* undoable debugging and code cleanliness
* undoable action filter state now merges, rather than replaces
* improve comments
* add debounce to undoable action filter; improve comments and debug sanity check code
* comments
* fix undoable bug with clear scatterplot actions
* disable undoable debug flag
* cleanup API and comments around statemachine
* add test id attribute to lasso
* add better error handling for gene fetch requests
* immutable crossfilter
* first cut at reducer refactor with cascade model
* add initial redo/undo implementation
* small optimization
* integrate expression with history
* add tests for new reducers and fix a couple of small initialization bugs
* treat tiny lasso selections as a clear
* better function name for clarity
* fix undo for differential expression
* remove logging
* fix regression due to bad merge
* cleanup and comments for clarity
* improve undoable configuration for flexibility
* fix stale comments
* remove debugging code from production build
* rename categoricalSelectionState
* rename file
* improve comments
* initial dataframe commit
* initial dataframe port of core app
* rename variables for clarity
* remove unused import
* comment out unused code
* fix array handling bug in crossfilter dimension creation
* allow creation of empty dataframes
* handle non-existent columns
* handle non-existent columns
* revise tests for new dataframe
* comments for clarity
* comments for clarity
* generate bulk add placeholder with real gene names
* fix bug in gene name adding
* more dataframe unit tests
* fix bug - subset from current world, not universe
* put cut and pasted code into a single function
* improve caching of crossfilter
* remove cascading update bug from graph
* more performance work
* improve state handling for scatterplot
* performance optimization of critical path
* add column summarization
* dataframe utils
* add callOnceLazy
* fix tests
* minor updates found during review
* fix misspelling
* remove RESTv02 from function names
* comment cleanup
* cut/icut col parameter defaults to null
* break up large test
* improve tests and comments on dataframe at/has functions
* add Dataframe withCol/dropCol
* expression varData now stored in a dataframe
* dead code cleanup
* use dataframe.summarize()
* test cases for Dataframe.col.summarize
* update test cases for new dataframe summarize
* improve naming
* use new hasCol API
* add comments
* add more Dataframe.withCol tests
* add ability to specify row index in cut operation
* retire subsetVarData function
* correctly handle expression subsetting
* lint and improve comments
* rename cut to subset
* create helper file for controls reducer