Skip to content
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

Make Scala interfaces more idiomatic #5798

Open
jpallas opened this issue Aug 6, 2017 · 15 comments
Open

Make Scala interfaces more idiomatic #5798

jpallas opened this issue Aug 6, 2017 · 15 comments

Comments

@jpallas
Copy link
Contributor

jpallas commented Aug 6, 2017

This is an umbrella for a couple of things I'd like to do for the Scala-specific interfaces in the chart, table, easyform, and fileloader packages.

  1. Change all List interfaces to use Seq. Seq is the generic type for an ordered collection, and will accept Scala Array, Vector, and Range (as well as List).
  2. Use Any instead of AnyRef where possible on input parameter types to avoid problems with using the Scala native types. Scala should handle auto-boxing of native numeric types.
  3. Add companion object interfaces for construction. It's more common in Scala to overload the companion apply than to overload the constructor, and even without overloading, the advantage of not typing new all over the place in a notebook is clear. Drawback: It will be awkward if some classes don't have companion-based constructors, so new Scala code may be needed even if the Java classes involved have Scala-friendly types. Impact: some maintenance load for Scala compatibility.
  4. Compile-time type safety. This is tricky. The base classes are implemented in Java, which doesn't have any way to express constraints like "Date or Number", so they fall back to type Object and rely on run-time checking with exceptions. Scala can use type constraints to be more specific, and Scala programmers are used to having compile-time type checking be as strict as possible. Major concerns:
    • Test code would have to written in Scala instead of Java
    • The constraint handling code would need to change if the underlying constraints changed (e. g., support for java.time.LocalDateTime in XYGraphics.setX)
    • This part of the code, while relatively isolated, would probably be opaque to anyone not fluent in Scala

So, I'm very much open to feedback on this. I think the first two items are low-cost/moderate-benefit. The others may be debatable, especially in terms of their impact on maintaining the Scala code when changes are made to the base libraries.

@scottdraves
Copy link
Contributor

Hi Joe, thanks for the suggestions. We have scala wrappers (https://github.com/twosigma/beakerx/blob/master/kernel/scala/src/main/java/com/twosigma/beakerx/scala/chart/xychart/plotitem/Points.scala) and our goal is to make it as idiomatic as possible. We just took a guess to get started. We are looking into this further....

@icexelloss
Copy link
Member

@scottdraves asked me to take a look at the issue. My understanding is that we want to provide Scala wrappers for java packages chart, table, easyform.

First of all, I am new to this problem so apologies if I say something stupid.

  • Given that maintaining a Scala API is non trivial amount of work, my first question is why do we need a Scala API? How does it look like if we just use the Java API in Scala (sorry if this has already been discussed)
    I'd imagine there needs to be some conversion between Scala/Java collections to specify data points etc, what else is using Scala API directly different from using Java API

  • Are there any guide line to follow? Can we find some existing open source project that does Scala wrappers over Java so we can take a look?

@jpallas For you changes you proposed, 1-3 seems fine. 4 is not clear to me, for instance, I don't know what do you mean by:

The base classes are implemented in Java, which doesn't have any way to express constraints like "Date or Number"

and

The constraint handling code would need to change if the underlying constraints changed (e. g., support for java.time.LocalDateTime in XYGraphics.setX)

Can you give a bit more details?

@jpallas
Copy link
Contributor Author

jpallas commented Aug 8, 2017

@icexelloss It's certainly reasonable to ask why Scala merits a custom API for these classes. The answer to your question "how does it look" using the Java interfaces is that it would look pretty ugly. Explicitly converting between Java collections and Scala collections would clutter up Scala cells in notebooks quite a bit. Some Scala users, especially ones who are primarily using Spark, may not be familiar with the Scala/Java conversion methods if they haven't worked with Java libraries from Scala. The error messages when conversions are omitted would, in some cases, be confusing or even misleading, since some of them would appear as run-time exceptions thrown by the implementation rather than compiler messages. (An exception message complaining that a "list of numbers" was expected will be very confusing if the user did, in fact, pass a Scala List[Int], for example.)

I'll post a separate comment on the questions about type-safe interfaces.

@icexelloss
Copy link
Member

@jpallas, thanks for the explanation. I agree calling explicit conversion asJava in a notebook is ugly.

How about using Scala implicit conversions such as:

http://www.scala-lang.org/api/2.12.1/scala/collection/convert/ImplicitConversionsToJava$.html ?

Can you post maybe an example of using the Java API+ Implicit Conversion vs Native Scala API?

@scottdraves
Copy link
Contributor

scottdraves commented Aug 8, 2017

We have the resources to make a good native API, no need to take a shortcut unless the result is just as good. Of course if there is a faster/simpler way with the same results, then by all means let's do it.

@jpallas
Copy link
Contributor Author

jpallas commented Aug 8, 2017

As noted in the docs,

It is recommended to use explicit conversions provided by collection.JavaConverters instead. Implicit conversions may cause unexpected issues.

Implicit conversions won't handle cases where conversions need to be nested. A good example is the TableDisplay constructor that takes a Collection<Map<String, Object>>. Implicit conversions don't chain, so this case (or List<List<?>> can't be handled implicitly.

@icexelloss
Copy link
Member

Yeah this makes sense. I think we should have a Scala native API then.

@scottdraves
Copy link
Contributor

Thanks for your input @icexelloss

@michalgce please get started making a PR for each of these points in order.
ask questions here as needed.

@jpallas
Copy link
Contributor Author

jpallas commented Aug 10, 2017

Some more details on the issue of static types for the Scala interfaces. (Earlier I said "type safety", but I meant specifically static types—the JVM will throw runtime exceptions for type errors.)

Consider XYGraphics, which is the parent for Line and Points (among others), and declares setX and setY. setY takes a List<Number>. This is a reasonable Java interface. It's inconvenient to use directly from Scala because the Scala native types are not derived from Java's Number, so even after using the asJava conversion on the collection, a Scala List[Int] won't conform to Java's List<Number>. (Note: although Scala's Int is not java.lang.Integer, the boxed representation is. That means casting a List[Int] to a List[Number] for a call to Java will work, although it is technically not safe, relying on an implementation detail that is not expressed in the type system.) The type-safe conversion from Scala List[Int] to Java List<Number> uses the implicit conversion (or view) from Int to java.lang.Integer. This can be done generically by defining a method with a view bound:

import scala.collection.JavaConverters._def setY[T <% Number](ys: Seq[T]): Unit = {
    val javaList = ys.map(y => y: Number).asJava
    setY(javaList)
  } 

(View bounds syntax is deprecated, however, so the above should actually be written as def setY[T](ys: Seq[T])(implicit conversion: T => Number)).

The story for setX is more complicated. Java can't express a type of List<Number | Date>, so the interface uses List<Object>. The implementation does runtime type checking to see whether each item is a Number or a Date. Scala context bounds can be used to constrain a generic type, so it can express "List of things of some type that satisfies a date-or-number constraint". Technically, this is not exactly what the implementation supports: the Java code will accept a list that contains a mix of numbers and dates, while the Scala constraint requires that the list be of a uniform type (that is, all numbers or all dates). We're unlikely to generate a heterogeneous collection in practice, though.

We can use the "type class" pattern to define a constraint such as JavaDateOrNumber. Then a type-safe implementation of setX might look like this:

  def setX[T : JavaDateOrNumber](xs: Seq[T]): Unit = {
    import JavaDateOrNumber.converter._
    val javaList = xs.map(y => y.asDateOrNumber).asJava
    setX(javaList)
  }

jpallas added a commit to jpallas/beakerx that referenced this issue Aug 25, 2017
jpallas added a commit to jpallas/beakerx that referenced this issue Aug 25, 2017
scottdraves pushed a commit that referenced this issue Aug 28, 2017
* #5798 Use Any instead of AnyVal in Line constructor

* #5798 Use Any instead of AnyRef in TableDisplay
jpallas added a commit to jpallas/beakerx that referenced this issue Aug 29, 2017
scottdraves pushed a commit that referenced this issue Aug 30, 2017
* #5798 Use Any instead of AnyVal in Line constructor

* #5798 Use Any instead of AnyRef in TableDisplay

* #5798 Use Any instead of AnyVal in Text, Rasters, and ConstantLine
MariuszJurowicz pushed a commit that referenced this issue Aug 30, 2017
* #5798 Use Any instead of AnyVal in Line constructor

* #5798 Use Any instead of AnyRef in TableDisplay

* #5798 Use Any instead of AnyVal in Text, Rasters, and ConstantLine
@jpallas
Copy link
Contributor Author

jpallas commented Oct 4, 2017

Time for an update on this. (Caution: some ranting ahead, with possible whining about dynamically typed languages like Groovy.) The first pass was naive, because I had no idea how thoroughly unhelpful some of the interfaces are. To be specific, I'm talking about things like this:

  public void setColor(Object color) {
    if (color instanceof Color) {
      this.baseColor = (Color) color;
    } else if (color instanceof java.awt.Color) {
      this.baseColor = new Color((java.awt.Color) color);
    } else if (color instanceof List) {
      @SuppressWarnings("unchecked")
      List<Object> cs = (List<Object>) color;
      setColors(cs);
    } else {
      throw new IllegalArgumentException(
              "setColor takes Color or List of Color");
    }
  }

Seriously, WTF? I don't really understand why this was done the way it was. I assume it was written for Groovy. I thought that Groovy is supposed to interoperate with Java sensibly around overloaded methods, and I think this is meant to be equivalent to a method with four overloads:

public void setColor(Color color) { ... }
public void setColor(java.awt.Color color) { ... }
public void setColor(List<Color> colorList) { ... }
public void setColor(List<java.awt.Color> colorList) { ... }

[EDIT: but the last two can't both be present due to type erasure]

Obviously, the first problem is that you have to read the implementation carefully to learn what the interface type is. The second problem is that the declared method takes Object, so type errors are impossible. That makes one approach for wrapping the interface in Scala, using implicit classes for extensions, unworkable because extension methods will only be considered if the call would otherwise fail to type-check. (Not sure if that problem also affects Kotlin, since I'm not familiar with its Java interop behavior.)

So, short of splitting a bunch of existing methods that do runtime type-tests into overloads, I think the easiest path forward for Scala is to create those overloads in Scala classes that inherit from the Java classes. That will still leave the untyped methods visible to Scala callers, but there's no way to hide them and preserve the existing type hierarchy. Since the added methods will need to be carried through the hierarchy, I think they should be done as traits that can be mixed in at each level. A bit more complex than I would like, but I don't see a simpler approach that works.

(Another option: pretend the Java bean style getters and setters don't exist at all, and use extension methods to add Scala style getters and setters. For consistency, that would mean covering all of the settable properties in each class. Yuck.)

@scottdraves
Copy link
Contributor

Yea it was written to optimize the Groovy API but there might be a better way to accomplish the same result. We will look into it in another issue.

@scottdraves
Copy link
Contributor

setColor should be fixed, please LMK if there are other similar problems (I expect them).

@jpallas
Copy link
Contributor Author

jpallas commented Oct 17, 2017

Since you asked .... Here's what a quick grep turns up for setters taking Object:

  • setBase in CategoryStems, CategoryArea, CategoryBars, BasedXYGraphics
  • setStyle in CategoryStems, CategoryLines, Stems
  • setSize in CategoryPoints, Points
  • setShape in CategoryPoints, Points
  • setFill in CategoryPoints, CategoryArea, CategoryBars, Points
  • setOutlineColor in CategoryPoints, CategoryArea, CategoryBars, Bars, Points
  • setWidth in CategoryArea, CategoryBars, Bars
  • setDrawOutline in CategoryArea, CategoryBars
  • setX in ConstantLine, Text
  • setData in Histogram

setValue in CategoryGraphics takes an array of Objects, expecting it to be an array of either array of Number or List of Number, if I'm following the code correctly. Since arrays are not generic, those could be successfully overloaded without hitting type erasure problems.

Setters taking a List of Objects, however, which includes some of the color-related ones that result from adding overloads and setX in XYGraphics and ConstantBand, can't be turned into overloads because of type erasure.

I'm not sure what to make of setItemLabel in CategoryGraphics or setToolTip in XYGraphics. I'm happy to ignore them for now.

@jpallas
Copy link
Contributor Author

jpallas commented Nov 20, 2017

Keeping this up to date on status. I've concluded that the only sensible way to make using the API not be horribly verbose is to emulate the ScalaFX syntax style. (The alternatives would be using named parameters with a huge number of parameters or a dynamic scheme that would depend on runtime checks.) Coupled with Scala-style accessors, this allows terse, reasonably idiomatic code like

val points = new Points {
  x = xValues
  y = yValues
  color = Color.RED
  shape = ShapeType.TRIANGLE
}

(As an aside, the "extend my class" pattern doesn't support this style, which is why I decided not to pursue it.)

For this to work, #6344 is needed so that the anonymous subclass created in this approach is serialized properly.

This still allows post-creation modification, such as

points.outlineColor = Color.BLUE
points.size = 20

It's possible to call the Java property-style accessors from Scala, but there's no way to overload a simple getter, so getFoo will return a Java type while foo will return a Scala type, if there's a difference. (The Scala accessors must be defined: Scala won't recognize property = value as a call to the mutator if there is only a mutator and no accessor.) If the Java type is nullable, the Scala accessor will return an Option and if the Java type is a List, the Scala accessor will return a Seq.

It's not clear whether companion-object construction interfaces are still useful with this style. On the one hand, it's slightly more convenient to say

Line(xValues, yValues)

than it is to say

new Line { x = xValues; y = yValues }

and the parameter names are visible in autocomplete (although completion doesn't seem to be working very well for Scala right now, not sure why, hopefully not just because of the move back to 2.11). On the other hand, you can't mix the two:

// Can't do this
Line(xValues, yValues) { color = Color.BLUE }
// Instead do this
new Line { x = xValues; y = yValues; color = Color.BLUE }
// or this
val line = Line(xValues, yValues)
line.color = Color.BLUE

So, I think the companion object construction interfaces should probably be limited to the most essential arguments, if they are retained at all.

Sorry to be so long-winded. Hopefully some of this can be recycled in the doc.

@scottdraves
Copy link
Contributor

👍 merged 6344

scottdraves pushed a commit that referenced this issue Jan 28, 2018
* getters and setters for Graphics and XYGraphics
start on typeclasses

* add properties for Points
introduce getNullabeList

* Add properties for ConstantLine and ConstantBand

* Add BasedXYGraphicsProperties

* Add properties for Line and tests
Introduce safeOption to JavaAdapter

* Use safeOption for nullable fill

* Add CategoryGraphicsProperties
Change visibility on CategoryGraphics fields to private

* Add properties for Bars

* Add properties for Stems

* Add Area properties

* Add Rasters properties

* Add properties for BasedCategoryGraphics

* Add properties for CategoryArea

* Add properties for CategoryStems

* Add properties for CategoryLines

* Add properties for CategoryPoints

* Add properties for CategoryBars

* Add properties for Text

* Add properties for Crosshair

* Add companion for XYStacker

* Update Scala plot doc/example

* Remove non-default constructors and refactor some tests

* Add support for turning view bounds into context bounds

* Remove Scala-compatible Java setters

* Use type constraints for numbers

* Use scalatest for Scala tests

* Update e2e test for Scala plot items

* Update doc with status

* Factor out conversion to sequence of Number with implicit helper

* Use context bounds for type-safe calls that set colors, numbers, and x-axis values (numbers and dates/times)

* Import scala versions of category plotitems

* Properties for ChartDetails and CombinedPlot

* Add properties for Chart

* Add TreeMap properties

* Add TreeMap properties

* Add AbstractChart properties

* Add Scala Histogram with properties

* Add Scala HeatMap with properties

* Add XYChartProperties

* Add Scala Plot, TimePlot, NanoPlot, and SimpleTimePlot

* Add Scala CategoryPlot

* Update Scala chart imports

* Update Scala Plot doc

* Update e2e test and remove arbitrary constructors

* Add autoZoom to AbstractChart

* Add YAxis properties and wrapper, make yAxes returned WrappedYAxis

* Adjust imports for Scala classes

* Update Scala Plot doc for YAxis

* Fix histogram DisplayMode

* Add a doc note about compatibility
MariuszJurowicz pushed a commit that referenced this issue Jan 30, 2018
* getters and setters for Graphics and XYGraphics
start on typeclasses

* add properties for Points
introduce getNullabeList

* Add properties for ConstantLine and ConstantBand

* Add BasedXYGraphicsProperties

* Add properties for Line and tests
Introduce safeOption to JavaAdapter

* Use safeOption for nullable fill

* Add CategoryGraphicsProperties
Change visibility on CategoryGraphics fields to private

* Add properties for Bars

* Add properties for Stems

* Add Area properties

* Add Rasters properties

* Add properties for BasedCategoryGraphics

* Add properties for CategoryArea

* Add properties for CategoryStems

* Add properties for CategoryLines

* Add properties for CategoryPoints

* Add properties for CategoryBars

* Add properties for Text

* Add properties for Crosshair

* Add companion for XYStacker

* Update Scala plot doc/example

* Remove non-default constructors and refactor some tests

* Add support for turning view bounds into context bounds

* Remove Scala-compatible Java setters

* Use type constraints for numbers

* Use scalatest for Scala tests

* Update e2e test for Scala plot items

* Update doc with status

* Factor out conversion to sequence of Number with implicit helper

* Use context bounds for type-safe calls that set colors, numbers, and x-axis values (numbers and dates/times)

* Import scala versions of category plotitems

* Properties for ChartDetails and CombinedPlot

* Add properties for Chart

* Add TreeMap properties

* Add TreeMap properties

* Add AbstractChart properties

* Add Scala Histogram with properties

* Add Scala HeatMap with properties

* Add XYChartProperties

* Add Scala Plot, TimePlot, NanoPlot, and SimpleTimePlot

* Add Scala CategoryPlot

* Update Scala chart imports

* Update Scala Plot doc

* Update e2e test and remove arbitrary constructors

* Add autoZoom to AbstractChart

* Add YAxis properties and wrapper, make yAxes returned WrappedYAxis

* Adjust imports for Scala classes

* Update Scala Plot doc for YAxis

* Fix histogram DisplayMode

* Add a doc note about compatibility
scottdraves pushed a commit that referenced this issue Mar 5, 2018
* fixed upstream, this version lock no longer needed

* fixed upstream, this version lock no longer needed

* version to 0.11.1

* add instructions to ensure we get current upstream

* #6652 beakerx.json priviliges changed to private (#6654)

* #6652 beakerx.json priviliges changed to private

* #6652 chmod replaced with osopen

* #6652 beakerx.json io operation flag changed to rw

* add cleaning of cell outputs for test notebooks (#6671)

* add clean output for tests

* clean output

* clean test notebooks

* clean test notebooks

* clean test notebooks

* #6594 allow to publish personal gists (#6637)

* #6586 show error dialog on gist publishing error

* #6586 move gistPublish to extension dir

* #66586 show the network error in gist publishing dialog

* #6594 allow to publish personal gists

* #6594 use html file for modal template

* #6594 store personal access token in beakerx.json

* #6594 add oauth scope information to modal

* adjust text

* can press enter

* #6594 allow publish on enter click

* #6594 set publish as default button

* #6676 Creating checkbox or text area with initial values does not work in expected way (Python Easy Form) (#6677)

* #6656 allowed different data types in python table (#6673)

* #6656 allowed different data types in python table

* #6656 fix for mixed table types pr

* fix test for EasyForm List (#6685)

* fix test for EasyForm List

* fix test

* version bump for mybinder

* #6575 Autoscale Y on mouse zoom (#6608)

* #6575 set chart Y limits to y data min/max on zoom

* #6575 Only autozoom if all plots are PointPlots

* #6575 use camelCase

* #6575 remove bad comment

* #6575 formatting fixes

* #6575 support all plot types by using getRange()

* #6575 Only autozoom if getRange() implemented for all plots

* #6575 formatting

* #6575 require option key modifier for autozoom

* #6575 chart option instead of alt key for autozoom

* #6575 add autozoom option to JS plotApi.js

* #6575 add autozoom to java chart

* #6575 documentation for autoZoom

* #6629 implement gist publish feature for Lab (#6635)

* #6629 implement gist publish feature for Lab

* #6629 add network error msg handler

* #6611 easyform radio buttons bad default value (#6670)

* #6611 overwrite RadioButtons - js

* #6611 set RadioButtons model module and view module to beakerx - java

* #6611 RadioButtons -> BeakerxRadioButtons; set model module and view module to beakerx - python

* #6611 allowed empty value for groovy radio buttons

* #6611 disable unchecking radios in ts

* #6611 no default option for radio and for single list

* #6611 PR cleanup - revert not needed changes

* #6611 PR cleanup - revert not needed changes - java

* #6619 xy properties (#6681)

* Fix setyAutoRange and add missing capitalization cases

* Normalize 'x' setters and getters for upper and lower case

* Normalize 'y' setters and getters for upper and lower case

* Add overlooked "is" getters

* #6529: remove thread from ExecutionResultSender (#6634)

* #6682 beaker config is moved to .bak by beakerx-install (#6684)

* #6682 beaker config is moved to .bak by beakerx-install

* #6682 changing beaker.json privileges on beakerx-install

* #6690 fixed empty values type handling in TableDisplay (jvm) (#6693)

* #6662 fixed checkbox group code interaction (#6692)

* add tests for data types for TableDisplay (python) (#6696)

* fix CheckBoxes EasyForm test (#6699)

* fix test script leaks processes (#6700)

* #5273 fix combinePlotScope error when deleting containing cell (#6672)

* #6691 add autoZoom support to CombinedCharts (#6698)

* #6691 add autoZoom support to CombinedCharts

* #6691 autoZoom support for python CombinedCharts

* #6569 maven cell magic (#6665)

* #6565 additional logging for other clojure kernel tests

* #6569 mvn cell magic part 1

* #6569 mvn cell magic part 2

* Revert "#6565 additional logging for other clojure kernel tests"

This reverts commit 4cb0cc3

* #6569 cr changes - banners for new files, fixed typo

* #6569 added examples and description for mvn cell magic

* #6569 fixed mvn cell magic additional repos bug

* #6569 removed dependecy conflict message

* #6569 tablesaw and spark demos classpath example update

* fix #6706 by just deleting semicolons (#6707)

* fix #6706 by just deleting semicolons

* remove outputs

* fix #6708

* new groovy big ints tests (#6664)

* new groovy big ints tests

* CR fixes

* CR fixes part 2

* CR fixes part 3

* fix bigint and long tests

* #6705 CsvPlotReader renamed to CSV (#6709)

* #6703 fixed setting list length on easyforms (#6710)

* #6703 single selection list size bug fix

* #6703 python default EF list size set to options count

* fix the long/bignum table tests again??

* python_easy_form_tests (#6713)

* #6702 fixed checkbox group code interaction in python (#6714)

* floating point in tables should be double not single precision

* add e2e tests for autotranslation groovy, python to jscript (#6718)

* add test notebook

* add test notebook

* test data

* add tests for autotranslation

* add tests for autotranslation

* clean test notebook

* fix #6724 recently introduced by my sloppy edit of this tutorial.  just use a literal series instead of a variable that is no longer defined.

* #6712 number format changed to double for CSV number converter (#6721)

* #6712: jackson-databind update version to 2.9.3 (#6725)

* tests for Python EasyForm (#6726)

* jarek/6560: handle arbitrary combinantion of code and magic (#6717)

* #6560: handling combination of code and magic

* #6560: handling combination of code and magic, correct results

* #6560: adapt test to changes

* #6560: update .gitignore by *.iml

* #6560: revert changes from LoadMagicCommand.ipynb

* #6560: CodeFrame refactor

* #6560: fix problem with removing session

* #6560: fix codeCell example

* #6560: delete the commented lines

* #6560: fix tests

* #6560: fix splitting code and magic

* #6560: delete removeExtraWhitespaces method

* #6560: add an example

* #5798 scala getters setters (#6731)

* getters and setters for Graphics and XYGraphics
start on typeclasses

* add properties for Points
introduce getNullabeList

* Add properties for ConstantLine and ConstantBand

* Add BasedXYGraphicsProperties

* Add properties for Line and tests
Introduce safeOption to JavaAdapter

* Use safeOption for nullable fill

* Add CategoryGraphicsProperties
Change visibility on CategoryGraphics fields to private

* Add properties for Bars

* Add properties for Stems

* Add Area properties

* Add Rasters properties

* Add properties for BasedCategoryGraphics

* Add properties for CategoryArea

* Add properties for CategoryStems

* Add properties for CategoryLines

* Add properties for CategoryPoints

* Add properties for CategoryBars

* Add properties for Text

* Add properties for Crosshair

* Add companion for XYStacker

* Update Scala plot doc/example

* Remove non-default constructors and refactor some tests

* Add support for turning view bounds into context bounds

* Remove Scala-compatible Java setters

* Use type constraints for numbers

* Use scalatest for Scala tests

* Update e2e test for Scala plot items

* Update doc with status

* Factor out conversion to sequence of Number with implicit helper

* Use context bounds for type-safe calls that set colors, numbers, and x-axis values (numbers and dates/times)

* Import scala versions of category plotitems

* Properties for ChartDetails and CombinedPlot

* Add properties for Chart

* Add TreeMap properties

* Add TreeMap properties

* Add AbstractChart properties

* Add Scala Histogram with properties

* Add Scala HeatMap with properties

* Add XYChartProperties

* Add Scala Plot, TimePlot, NanoPlot, and SimpleTimePlot

* Add Scala CategoryPlot

* Update Scala chart imports

* Update Scala Plot doc

* Update e2e test and remove arbitrary constructors

* Add autoZoom to AbstractChart

* Add YAxis properties and wrapper, make yAxes returned WrappedYAxis

* Adjust imports for Scala classes

* Update Scala Plot doc for YAxis

* Fix histogram DisplayMode

* Add a doc note about compatibility

* fix #6734 by mentioning and linking to ScalaFX

* Fix typo in Python table tutorial (#6740)

Fix for #6732

*  add e2e tests for combination of code and magics (#6741)

* add tests for combination of code and magics

* add tests

* fix code and magic tests (#6744)

* add tests for combination of code and magics

* add tests

* fix test

* #6697 beakerx commands refactor (#6727)

* #6697 beakerx commands refactor

* #6697 changed jupyter notebook call, cr changes

* fix capitalization

* version 0.12.0

* clarify how to update the feedstock

* update binder links

* #6716 fixed code interaction for combobox in python (#6755)

* fix #6432 by not attempting to recognize dates (#6757)

*  #6722: STIL example (#6751)

*  #6722: add STIL notebook

* add text, link from Start Here, move to doc

* fix #6749 by increasing heap allocated to scala

* improve uninstall process to support the prefix argument, and also to handle the kernelspec_manager

* version 0.12.1

* update mybinder link for 0.12.1

* #6629 publish non anonymous gists in Lab (#6743)

* #6629 publish non anonymous gists

* #6629 remove jsx option

* add e2e tests for publish notebook (#6756)

* add tests for publish

* add tests for publish

* Two things here: (#6758)

1. I tried to clean this file by arranging ignored patterns under a topic to make it clearer why they are there.

2. I added a section for vim related files that should be ignored.

* improve npm publish steps

* #6760 disabling server extension on uninstall (#6762)

* #6423 port port BeakerX tree panel to Lab (#6711)

* #6423 expose full bootstrap styles for lab, and fix font path issue

* #6423 Create and register BeakerxTree JupyterLabPlugin

* #6423 BeakerXTreeWidget - recreate layout using "@phosphor/widgets" Panel

* #6423 BannerWidget - implementation using "@phosphor/widgets"

* #6423 SyncIndicatorWidget

* #6423 JVMOptionsWidget

* #6423 BeakerxApi and Urls for BeakerxTree

* #6423 add overflow to Widget

* #6423 remove unused code

* #6423 DefaultOptionsWidget, DefaultOptionsModel and HeapGBValidator

* #6423 PropertiesWidget, PropertiesModel

* #6423 SyncIndicatorWidget

* #6423 Messages

* #6423 OtherOptionsWidget, OtherOptionsModel

* #6423 BeakerxApi

* #6423 BeakerxApi JVMOptionsWidget

* #6423 Restore widget state on reload

* #6423 change => keyup

* #6423 change command label

* #6423 wip

* #6423 move tree source from js/lab to js/notebook

* #6423 packages, tsconfig, jquery

* #6423 fix compilation errors

* #6423 working tree widget in notebook

* #6423 remove not needed files

* #6423 remove paths from .gitignore

* #6423 use BeakerXTreeWidget in lab

* #6423 fix missed baseUrl TODO; BeakerxApi => BeakerXApi; fix NaN showing when changing heap size to empty string

* #6423 fix

* add e2e tests for TableDisplay for pandas (#6766)

* add test for DisplayTable for pandas

* refactor test for regression

* #6771: jackson-databind downgrade version from 2.9.3 to 2.6.5 (#6778)

* add e2e tests for publish notebook (#6780)

* add e2e tests for publish notebook

* clean notebook output

* clean widget state on notebook

* #6781 granted access for docker beakerx user to conda env (#6789)

* #6640 chagned doc to conver pandas date format (#6787)

* #6765 handled kernel uninstall errors (#6790)

* add e2e tests for Spark Scala (#6788)

* add tests for Spark Scala

* clean notebook output

* #6761 javadoc path changed to static and relative (#6786)

* version 0.12.2

* jarek/6617: add output widget (#6742)

* #6617: beakerx stdout per evaluation

* #6617: add Output widget

* #6617: handle rich material

* #6617: sync messages

* #6738 add clipPath to plots (#6795)

* jarek/6736: [magic command] allow spaces in jar names (#6797)

* #6736: handle jars with spaces

* #6736: handle exceptions

* adjust graph height so it is not smooshed

* #6772: show null execution result tests (#6799)

* #6772 add test notebook

* #6772 add test cases

* #6772 fix null execution test case

* #6806 remove extra comments from wdio conf file (#6808)

* #6214 add UI options (#6798)

* #6423 expose full bootstrap styles for lab, and fix font path issue

* #6423 Create and register BeakerxTree JupyterLabPlugin

* #6423 BeakerXTreeWidget - recreate layout using "@phosphor/widgets" Panel

* #6423 BannerWidget - implementation using "@phosphor/widgets"

* #6423 SyncIndicatorWidget

* #6423 JVMOptionsWidget

* #6423 BeakerxApi and Urls for BeakerxTree

* #6423 add overflow to Widget

* #6423 remove unused code

* #6423 DefaultOptionsWidget, DefaultOptionsModel and HeapGBValidator

* #6423 PropertiesWidget, PropertiesModel

* #6423 SyncIndicatorWidget

* #6423 Messages

* #6423 OtherOptionsWidget, OtherOptionsModel

* #6423 BeakerxApi

* #6423 BeakerxApi JVMOptionsWidget

* #6423 Restore widget state on reload

* #6423 change => keyup

* #6423 change command label

* #6423 wip

* #6423 move tree source from js/lab to js/notebook

* #6423 packages, tsconfig, jquery

* #6423 fix compilation errors

* #6423 working tree widget in notebook

* #6423 remove not needed files

* #6423 remove paths from .gitignore

* #6423 use BeakerXTreeWidget in lab

* #6423 fix missed baseUrl TODO; BeakerxApi => BeakerXApi; fix NaN showing when changing heap size to empty string

* #6423 fix

* #6214 add UIOptionsWidget, UIOptionsModel, messages and logic

* #6214 remove console.log

* #6214 change widget template

* #6214 add show_publication to IUIOptions

* #6214 add show_publication UIOptionsWidget

* #6214 add JVMOptionsChangedMessage

* #6214 refactor ui_options are not part of jvm_options, load and save are performed on TreeModel/Widget level

* #6214 rename BeakerXTreeWidget => TreeWidget; introduce isLab and CodeCell options; move BeakerXApi creation into TreeWidget

* #6214 extract IApiSettingsResponse

* #6214 extract IJVMOptions

* #6214 extract IUIOptions

* #6214 extract ITreeWidgetOptions

* #6214 DefaultOptionsWidgetInterface

* #6214 PropertiesWidgetInterface

* #6214 OtherOptionsWidgetInterface

* #6214 DefaultOptionsModel

* #6214 OtherOptionsModel

* #6214 PropertiesModel

* #6214 export default

* #6214 remove extracted OtherOptionsModel class from file

* #6214 JVMOptionsModel

* #6214 remove types/interfaces there were extracted

* #6214 HeapGBValidator

* #6214 fix import

* #6214 add TreeWidgetModel; UIOptionsModel

* #6214 add UIOptionsWidget, UIOptionsWidgetInterface

* #6214 fix after move

* #6214 extract model

* #6214 add banner fix imports

* #6214 pass CodeCell to TreeWidget

* #6214 use saved ui_options

* #6214 remove not needed code

* #6214 handle show_publication

* #6214 move UIOptionsHelper to extension directory

* #6214 remove comment

* #6214 remove not needed option in lab

* #6214 cs fixes

* #6214 fix uiOptionsModel undefined case

* #6214 show publication should be enabled by default; set default options in the backend

* #6214 add margin to wide cells

* #6214 better handling of autoCloseBrackets; disable improve fonts handle

* #6214 hide improve fonts checkbox

* #6214 fix margins

* #6814 fix The "Publish..." button is disappeared (#6815)

* #6770 - add e2e tests for loadMagicCommand (#6817)

* #6770 add loadMagicCommand test file

* #6770 add loadMagicCommandTest notebook

* #6769 - rename handlingCombinationOfCodeAndMagics (#6812)

* #6769 rename test file

* #6769 change test path and notebook name

* #6804: fix static import magic command (#6813)

* #6745 password beakerx widget (#6792)

* #6745 password beakerx widget

* #6745 fixed submit for password fields

* this config file should have a newline at the end

* #6783 another UI option: autosave (#6819)

* #6783 add auto_save option to default_config in python

* #6783 add auto_save option to type, model and widget

* #6783 fix defaults after merge

* #6783 auto_save option hangling

* use the standard keyword, see jupyterlab/jupyterlab#3841

* Spot/6820 (#6822)

* fix #6820 by changing the default

* hm, change both defaults.  and improve text for publication option

* src files should end with newline

* #6826 fix saving notebooks broken for doc folder (#6827)

* #6737: bold user error (#6828)

* #6810 fixed groovy magic initialization and handling empty dataframe (#6830)

* #6810 handling display of empty DataFrame

* #6810 default pandas display instead of TableDisplay

* #6810 fixed groovy magic initialization

* fix #6831 by lazily starting the groovy kernel (#6833)

* version 0.13.0

* polish conda packaging instructions

* pytest no longer needed due to upstream fix

* update mybinder links to 0.13.0

* #6832 disabling magic kernels on ipython shutdown (#6847)

* Add more colors (#6844)

*  #6643: change logging to slf4j-log4j12 (#6845)

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widgets (#6846)

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widget

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widget

* make e2e tests work on Jupyter Lab Enhancement (#6850)

* add labx tests

* add lab e2e tests

* fix #6834 by making a tutorial for the output widget.  also add doc f… (#6857)

* fix #6834 by making a tutorial for the output widget.  also add doc for the UI options panel.

* missing file

* #6854 Reorganize tests (#6861)

* rename tests directory

* #6854 rename notebooks directory

* detecting app for tests (#6862)

* detecting app for tests

* change code for handler

* typo

* #6774 - make e2e tests for jvm repr (#6849)

* add kernel api tests

* #6774 clear notebook outputs

* rename test file

* default to notebook test suite

* #6837 - python init cells (#6866)

* create test notebook

* #6837 add tests

* #6837 typo

* #6837 add newline

* #6863 move files to correct directories (#6864)

* #6800: display widgets in Output (#6858)

* #6800: display widgets in Output

* #6800: display widgets in Output

* jarek/6856:  redirect only stderr or stdout to the widget (#6865)

* #6856:  redirect only stderr or stdout to the widget

* Merge branch 'master' into jarek/6856_direct_only_error_output

# Conflicts:
#	kernel/base/src/main/java/com/twosigma/beakerx/widget/Output.java
#	test/ipynb/groovy/JavaWidgetsTest.ipynb

* ipywidgets python api (#6868)

* #6860: rename packages (#6874)

* #6870: handle incorrect code (#6872)

* jarek/6869: language version upgrades (#6877)

* #6869: language version upgrades

* #6869: upgrade kotlin version 1.2.21

* refactoring of the tests for lab (#6875)

* refactoring of the text output tests

* refactoring tests

* refactoring tests of outputs

* refactoring tests for lab

* fix the grovyPlotActions test for lab

* fix sparkScala test for lab

* fix publish tests for lab

* fix test

* #6800: add general display method (#6871)

* #6730: tableDisplay update value (#6816)

* #6730: tableDisplay update value

* #6730: remove update cell method and add example for updating values by sendModel

* #6730: update cell by column name

* fix import (#6880)

* #6730 updatecell for tabledisplay in python (#6887)

* #6884 fix names of tests for renamed MIMEContainerFactory (#6885)

* fix test (#6882)

* improve STIL example (#6722) (#6873)

Fix the STIL example so that it accesses the StarTable object
cell values directly rather than just reading all the cells
into an internal array and accessing that.

The StarTable object requires random access for this to work;
tables read from CSV files are not random-access by default,
so the Tables.randomTable method has to get called on it.

In fact this is just moving the copy-to-internal-array step
out of the groovy and into the STIL library, so in this case
it doesn't make a huge amount of difference.  However, if the
input file was e.g. a FITS file, it would mean that data access
was strictly on-demand to the mapped disk file, and so potentially
much more efficient, especially for large files.

* #6878: read version (#6881)

*  refactor of e2e tests that checks tables elements (#6892)

* refactor code for table tests

* refactor of tests that checks tables elements

* #6809 sections of options should use tabs (#6883)

* #6809 add tab-pane wrapper in notebook

* #6809 keep styles in css file not in Widgets

* #6809 DOMUtils helper

* #6809 Remove style from Widget, notify parent when size changed

* #6809 remove style from widget

* #6809 SizeChangedMessage

* #6809 update size when needed

* #6809 OptionsWidget with tabs

* #6809 import styles from css, remove styles from widget, use OptionsWidget with tabs

* #6809 cleanup css

* #6809 CS

* #6809 fix lab

* #6809 fix

* #6809 remove duplicated "JVM Options" and "UI Options"

* #6855 adjust layout in our options tab (#6890)

* #6855 adjust banner layout

* #6809 fix truncated labels on tabs

* #6809 hide sync widget on tab change

* Spot/6495 (#6898)

* #6495 add first lines to test linking

* #6495 flesh out text

* #6495 flesh out text

* #6495 flesh out text

* #6495 finish up text

* #6495 polish up text

* e2e tests for Output containers (#6901)

* add tests for output containers

* add tests for output containers

* #6802 another UI option: improve fonts (#6900)

* #6809 add tab-pane wrapper in notebook

* #6809 keep styles in css file not in Widgets

* #6809 DOMUtils helper

* #6809 Remove style from Widget, notify parent when size changed

* #6809 remove style from widget

* #6809 SizeChangedMessage

* #6809 update size when needed

* #6809 OptionsWidget with tabs

* #6809 import styles from css, remove styles from widget, use OptionsWidget with tabs

* #6809 cleanup css

* #6809 CS

* #6809 fix lab

* #6809 fix

* #6802 wip

* #6802 improve fonts handling

* add e2e tests for python/tableAPI (#6911)

* add tests to notebook

* add tests for python tableAPI

* add tests for python tableAPI

* #6912 improved style in python install script (#6917)

* add e2e tests for code autocomplete  (#6915)

* add tests for autocomplete

* clean notebook outputs

* correct size of brand in options tab

* test change

*  fix autocomplete tests for lab (#6924)

* add tests for autocomplete

* clean notebook outputs

* fix autocomplete tests for lab

* #6719 pinned conda openjdk package version for docker build (#6923)

* pin openjdk version to address #6719

* tighter formatting

* fix typo in doc

* improve modularity
scottdraves pushed a commit that referenced this issue Mar 22, 2018
* #6674 use phosphor datagrid to display TableDisplay data (#6680)

* #6674 Add tests for TableDisplay with DataGrid. (#6701)

* #6674 update dataGrid styles, refactor consts

* #6674 add dataGrid tests

* #6674 add DataFormatter tests

* #6674 add TableDataModel tests

* #6674 fix some compilation TS errors

* #6674 add header menu to DataGrid (#6735)

* #6674 add columnMenus base feature

* 6674 add menu items filtering

* #6674 add HeaderMenu tests

* Merge remote-tracking branch 'origin/master' into mariusz/6674 (#6750)

* #6674 add column alignment feature (#6754)

* #6674 add column abstraction to grid

* #6674 test the DataGridColumn class

* #6674 add CellRendererFactory

* #6674 refactor names and dependencies

* #6674 fix headers alignment and menu triggers positioning (#6763)

* #6674 fix headers alignment

* #6674 fix menu trigger position after column resizing

* #6674 refactor columns state

* #6674 add heatmap highlighter support (#6779)

* #6674 add cell highlighters - heatmap highlighter

* #6674 add heatmap highlighter tests

* #6674 add cell highlighters (#6791)

* #6674 refactor DataFormater to use cell renderer

* #6674 add ThreeColorHeatmapHighlighter tests

* #6674 add ValueHighlighter

* #6674 add ValueHighlighter tests

* #6674 bind format and highlighter functions in HeaderMenu (#6811)

* #6674 connect highlighters to header menu

* #6674 add more tests to HighlighterManager

* #6674 add conect formatting to header menu

* #6674 bind time formating in HeaderMenu

*  #6674 implement column visibility feature  (#6848)

* #6674 implement column hiding feature

* #6674 fix tests, add ColumnManager tests

*  #6674 add DataGrid sorting feature (#6859)

* #6674 add DataGrid sorting feature

* #6674 add RowManager

* #6674 add RowManager tests

* #6674 add focus state to the DataGrid

* #6674 DataGrid filtering and searching rows (#6876)

* #6674 add rows filtering

* #6674 add search by string feature

* #6674 move rowManager instance to BeakerxDataGrid from Model

* #6674 add filtering and sorting tests

*  #6674 cells selection, copy and download as CSV feature (#6886)

* #6674 cells selection feature

* #6674 add download as CSV feature

* #6674 add CellSelectionManager and CellManager tests

* #6674 add column moving feature (#6891)

* #6674 add value resolver to highlighters

* #6674 add reset formatting feature

* #6674 move column to front/end feature

* #6674 add column move tests

*  #6674 add keyboard support and aesthetic improvements (#6896)

* #6674 fix hiding and moving columns in parallel

* #6674 add keyboard event handling

* #6674 fix the first column hover handler

* #6674 viewport size and aesthetic improvements (#6905)

* #6674 add EventManager and CellFocusManager tests (#6910)

* #6674 add EventManager and CellFocusManager tests

* #6674 set the coverage to include the .ts files from /src

* #6674 add CellManager tests

* #6674 add dblclick handler

* #6674 implement cell tooltips feature (#6916)

* #6674 implement cell tooltips feature

* #6674 handle moved columns in tooltips

* #6674 render vertical headers (#6919)

* #6674 add DataGrid context menu (#6925)

* #6674 add context menu

* #6674 add too columns limit modal

*  Merge remote-tracking branch 'origin/master' into mariusz/6674  (#6930)

* fixed upstream, this version lock no longer needed

* fixed upstream, this version lock no longer needed

* version to 0.11.1

* add instructions to ensure we get current upstream

* #6652 beakerx.json priviliges changed to private (#6654)

* #6652 beakerx.json priviliges changed to private

* #6652 chmod replaced with osopen

* #6652 beakerx.json io operation flag changed to rw

* add cleaning of cell outputs for test notebooks (#6671)

* add clean output for tests

* clean output

* clean test notebooks

* clean test notebooks

* clean test notebooks

* #6594 allow to publish personal gists (#6637)

* #6586 show error dialog on gist publishing error

* #6586 move gistPublish to extension dir

* #66586 show the network error in gist publishing dialog

* #6594 allow to publish personal gists

* #6594 use html file for modal template

* #6594 store personal access token in beakerx.json

* #6594 add oauth scope information to modal

* adjust text

* can press enter

* #6594 allow publish on enter click

* #6594 set publish as default button

* #6676 Creating checkbox or text area with initial values does not work in expected way (Python Easy Form) (#6677)

* #6656 allowed different data types in python table (#6673)

* #6656 allowed different data types in python table

* #6656 fix for mixed table types pr

* fix test for EasyForm List (#6685)

* fix test for EasyForm List

* fix test

* version bump for mybinder

* #6575 Autoscale Y on mouse zoom (#6608)

* #6575 set chart Y limits to y data min/max on zoom

* #6575 Only autozoom if all plots are PointPlots

* #6575 use camelCase

* #6575 remove bad comment

* #6575 formatting fixes

* #6575 support all plot types by using getRange()

* #6575 Only autozoom if getRange() implemented for all plots

* #6575 formatting

* #6575 require option key modifier for autozoom

* #6575 chart option instead of alt key for autozoom

* #6575 add autozoom option to JS plotApi.js

* #6575 add autozoom to java chart

* #6575 documentation for autoZoom

* #6629 implement gist publish feature for Lab (#6635)

* #6629 implement gist publish feature for Lab

* #6629 add network error msg handler

* #6611 easyform radio buttons bad default value (#6670)

* #6611 overwrite RadioButtons - js

* #6611 set RadioButtons model module and view module to beakerx - java

* #6611 RadioButtons -> BeakerxRadioButtons; set model module and view module to beakerx - python

* #6611 allowed empty value for groovy radio buttons

* #6611 disable unchecking radios in ts

* #6611 no default option for radio and for single list

* #6611 PR cleanup - revert not needed changes

* #6611 PR cleanup - revert not needed changes - java

* #6619 xy properties (#6681)

* Fix setyAutoRange and add missing capitalization cases

* Normalize 'x' setters and getters for upper and lower case

* Normalize 'y' setters and getters for upper and lower case

* Add overlooked "is" getters

* #6529: remove thread from ExecutionResultSender (#6634)

* #6682 beaker config is moved to .bak by beakerx-install (#6684)

* #6682 beaker config is moved to .bak by beakerx-install

* #6682 changing beaker.json privileges on beakerx-install

* #6690 fixed empty values type handling in TableDisplay (jvm) (#6693)

* #6662 fixed checkbox group code interaction (#6692)

* add tests for data types for TableDisplay (python) (#6696)

* fix CheckBoxes EasyForm test (#6699)

* fix test script leaks processes (#6700)

* #5273 fix combinePlotScope error when deleting containing cell (#6672)

* #6691 add autoZoom support to CombinedCharts (#6698)

* #6691 add autoZoom support to CombinedCharts

* #6691 autoZoom support for python CombinedCharts

* #6569 maven cell magic (#6665)

* #6565 additional logging for other clojure kernel tests

* #6569 mvn cell magic part 1

* #6569 mvn cell magic part 2

* Revert "#6565 additional logging for other clojure kernel tests"

This reverts commit 4cb0cc3

* #6569 cr changes - banners for new files, fixed typo

* #6569 added examples and description for mvn cell magic

* #6569 fixed mvn cell magic additional repos bug

* #6569 removed dependecy conflict message

* #6569 tablesaw and spark demos classpath example update

* fix #6706 by just deleting semicolons (#6707)

* fix #6706 by just deleting semicolons

* remove outputs

* fix #6708

* new groovy big ints tests (#6664)

* new groovy big ints tests

* CR fixes

* CR fixes part 2

* CR fixes part 3

* fix bigint and long tests

* #6705 CsvPlotReader renamed to CSV (#6709)

* #6703 fixed setting list length on easyforms (#6710)

* #6703 single selection list size bug fix

* #6703 python default EF list size set to options count

* fix the long/bignum table tests again??

* python_easy_form_tests (#6713)

* #6702 fixed checkbox group code interaction in python (#6714)

* floating point in tables should be double not single precision

* add e2e tests for autotranslation groovy, python to jscript (#6718)

* add test notebook

* add test notebook

* test data

* add tests for autotranslation

* add tests for autotranslation

* clean test notebook

* fix #6724 recently introduced by my sloppy edit of this tutorial.  just use a literal series instead of a variable that is no longer defined.

* #6712 number format changed to double for CSV number converter (#6721)

* #6712: jackson-databind update version to 2.9.3 (#6725)

* tests for Python EasyForm (#6726)

* jarek/6560: handle arbitrary combinantion of code and magic (#6717)

* #6560: handling combination of code and magic

* #6560: handling combination of code and magic, correct results

* #6560: adapt test to changes

* #6560: update .gitignore by *.iml

* #6560: revert changes from LoadMagicCommand.ipynb

* #6560: CodeFrame refactor

* #6560: fix problem with removing session

* #6560: fix codeCell example

* #6560: delete the commented lines

* #6560: fix tests

* #6560: fix splitting code and magic

* #6560: delete removeExtraWhitespaces method

* #6560: add an example

* #5798 scala getters setters (#6731)

* getters and setters for Graphics and XYGraphics
start on typeclasses

* add properties for Points
introduce getNullabeList

* Add properties for ConstantLine and ConstantBand

* Add BasedXYGraphicsProperties

* Add properties for Line and tests
Introduce safeOption to JavaAdapter

* Use safeOption for nullable fill

* Add CategoryGraphicsProperties
Change visibility on CategoryGraphics fields to private

* Add properties for Bars

* Add properties for Stems

* Add Area properties

* Add Rasters properties

* Add properties for BasedCategoryGraphics

* Add properties for CategoryArea

* Add properties for CategoryStems

* Add properties for CategoryLines

* Add properties for CategoryPoints

* Add properties for CategoryBars

* Add properties for Text

* Add properties for Crosshair

* Add companion for XYStacker

* Update Scala plot doc/example

* Remove non-default constructors and refactor some tests

* Add support for turning view bounds into context bounds

* Remove Scala-compatible Java setters

* Use type constraints for numbers

* Use scalatest for Scala tests

* Update e2e test for Scala plot items

* Update doc with status

* Factor out conversion to sequence of Number with implicit helper

* Use context bounds for type-safe calls that set colors, numbers, and x-axis values (numbers and dates/times)

* Import scala versions of category plotitems

* Properties for ChartDetails and CombinedPlot

* Add properties for Chart

* Add TreeMap properties

* Add TreeMap properties

* Add AbstractChart properties

* Add Scala Histogram with properties

* Add Scala HeatMap with properties

* Add XYChartProperties

* Add Scala Plot, TimePlot, NanoPlot, and SimpleTimePlot

* Add Scala CategoryPlot

* Update Scala chart imports

* Update Scala Plot doc

* Update e2e test and remove arbitrary constructors

* Add autoZoom to AbstractChart

* Add YAxis properties and wrapper, make yAxes returned WrappedYAxis

* Adjust imports for Scala classes

* Update Scala Plot doc for YAxis

* Fix histogram DisplayMode

* Add a doc note about compatibility

* fix #6734 by mentioning and linking to ScalaFX

* Fix typo in Python table tutorial (#6740)

Fix for #6732

*  add e2e tests for combination of code and magics (#6741)

* add tests for combination of code and magics

* add tests

* fix code and magic tests (#6744)

* add tests for combination of code and magics

* add tests

* fix test

* #6697 beakerx commands refactor (#6727)

* #6697 beakerx commands refactor

* #6697 changed jupyter notebook call, cr changes

* fix capitalization

* version 0.12.0

* clarify how to update the feedstock

* update binder links

* #6716 fixed code interaction for combobox in python (#6755)

* fix #6432 by not attempting to recognize dates (#6757)

*  #6722: STIL example (#6751)

*  #6722: add STIL notebook

* add text, link from Start Here, move to doc

* fix #6749 by increasing heap allocated to scala

* improve uninstall process to support the prefix argument, and also to handle the kernelspec_manager

* version 0.12.1

* update mybinder link for 0.12.1

* #6629 publish non anonymous gists in Lab (#6743)

* #6629 publish non anonymous gists

* #6629 remove jsx option

* add e2e tests for publish notebook (#6756)

* add tests for publish

* add tests for publish

* Two things here: (#6758)

1. I tried to clean this file by arranging ignored patterns under a topic to make it clearer why they are there.

2. I added a section for vim related files that should be ignored.

* improve npm publish steps

* #6760 disabling server extension on uninstall (#6762)

* #6423 port port BeakerX tree panel to Lab (#6711)

* #6423 expose full bootstrap styles for lab, and fix font path issue

* #6423 Create and register BeakerxTree JupyterLabPlugin

* #6423 BeakerXTreeWidget - recreate layout using "@phosphor/widgets" Panel

* #6423 BannerWidget - implementation using "@phosphor/widgets"

* #6423 SyncIndicatorWidget

* #6423 JVMOptionsWidget

* #6423 BeakerxApi and Urls for BeakerxTree

* #6423 add overflow to Widget

* #6423 remove unused code

* #6423 DefaultOptionsWidget, DefaultOptionsModel and HeapGBValidator

* #6423 PropertiesWidget, PropertiesModel

* #6423 SyncIndicatorWidget

* #6423 Messages

* #6423 OtherOptionsWidget, OtherOptionsModel

* #6423 BeakerxApi

* #6423 BeakerxApi JVMOptionsWidget

* #6423 Restore widget state on reload

* #6423 change => keyup

* #6423 change command label

* #6423 wip

* #6423 move tree source from js/lab to js/notebook

* #6423 packages, tsconfig, jquery

* #6423 fix compilation errors

* #6423 working tree widget in notebook

* #6423 remove not needed files

* #6423 remove paths from .gitignore

* #6423 use BeakerXTreeWidget in lab

* #6423 fix missed baseUrl TODO; BeakerxApi => BeakerXApi; fix NaN showing when changing heap size to empty string

* #6423 fix

* add e2e tests for TableDisplay for pandas (#6766)

* add test for DisplayTable for pandas

* refactor test for regression

* #6771: jackson-databind downgrade version from 2.9.3 to 2.6.5 (#6778)

* add e2e tests for publish notebook (#6780)

* add e2e tests for publish notebook

* clean notebook output

* clean widget state on notebook

* #6781 granted access for docker beakerx user to conda env (#6789)

* #6640 chagned doc to conver pandas date format (#6787)

* #6765 handled kernel uninstall errors (#6790)

* add e2e tests for Spark Scala (#6788)

* add tests for Spark Scala

* clean notebook output

* #6761 javadoc path changed to static and relative (#6786)

* version 0.12.2

* jarek/6617: add output widget (#6742)

* #6617: beakerx stdout per evaluation

* #6617: add Output widget

* #6617: handle rich material

* #6617: sync messages

* #6738 add clipPath to plots (#6795)

* jarek/6736: [magic command] allow spaces in jar names (#6797)

* #6736: handle jars with spaces

* #6736: handle exceptions

* adjust graph height so it is not smooshed

* #6772: show null execution result tests (#6799)

* #6772 add test notebook

* #6772 add test cases

* #6772 fix null execution test case

* #6806 remove extra comments from wdio conf file (#6808)

* #6214 add UI options (#6798)

* #6423 expose full bootstrap styles for lab, and fix font path issue

* #6423 Create and register BeakerxTree JupyterLabPlugin

* #6423 BeakerXTreeWidget - recreate layout using "@phosphor/widgets" Panel

* #6423 BannerWidget - implementation using "@phosphor/widgets"

* #6423 SyncIndicatorWidget

* #6423 JVMOptionsWidget

* #6423 BeakerxApi and Urls for BeakerxTree

* #6423 add overflow to Widget

* #6423 remove unused code

* #6423 DefaultOptionsWidget, DefaultOptionsModel and HeapGBValidator

* #6423 PropertiesWidget, PropertiesModel

* #6423 SyncIndicatorWidget

* #6423 Messages

* #6423 OtherOptionsWidget, OtherOptionsModel

* #6423 BeakerxApi

* #6423 BeakerxApi JVMOptionsWidget

* #6423 Restore widget state on reload

* #6423 change => keyup

* #6423 change command label

* #6423 wip

* #6423 move tree source from js/lab to js/notebook

* #6423 packages, tsconfig, jquery

* #6423 fix compilation errors

* #6423 working tree widget in notebook

* #6423 remove not needed files

* #6423 remove paths from .gitignore

* #6423 use BeakerXTreeWidget in lab

* #6423 fix missed baseUrl TODO; BeakerxApi => BeakerXApi; fix NaN showing when changing heap size to empty string

* #6423 fix

* #6214 add UIOptionsWidget, UIOptionsModel, messages and logic

* #6214 remove console.log

* #6214 change widget template

* #6214 add show_publication to IUIOptions

* #6214 add show_publication UIOptionsWidget

* #6214 add JVMOptionsChangedMessage

* #6214 refactor ui_options are not part of jvm_options, load and save are performed on TreeModel/Widget level

* #6214 rename BeakerXTreeWidget => TreeWidget; introduce isLab and CodeCell options; move BeakerXApi creation into TreeWidget

* #6214 extract IApiSettingsResponse

* #6214 extract IJVMOptions

* #6214 extract IUIOptions

* #6214 extract ITreeWidgetOptions

* #6214 DefaultOptionsWidgetInterface

* #6214 PropertiesWidgetInterface

* #6214 OtherOptionsWidgetInterface

* #6214 DefaultOptionsModel

* #6214 OtherOptionsModel

* #6214 PropertiesModel

* #6214 export default

* #6214 remove extracted OtherOptionsModel class from file

* #6214 JVMOptionsModel

* #6214 remove types/interfaces there were extracted

* #6214 HeapGBValidator

* #6214 fix import

* #6214 add TreeWidgetModel; UIOptionsModel

* #6214 add UIOptionsWidget, UIOptionsWidgetInterface

* #6214 fix after move

* #6214 extract model

* #6214 add banner fix imports

* #6214 pass CodeCell to TreeWidget

* #6214 use saved ui_options

* #6214 remove not needed code

* #6214 handle show_publication

* #6214 move UIOptionsHelper to extension directory

* #6214 remove comment

* #6214 remove not needed option in lab

* #6214 cs fixes

* #6214 fix uiOptionsModel undefined case

* #6214 show publication should be enabled by default; set default options in the backend

* #6214 add margin to wide cells

* #6214 better handling of autoCloseBrackets; disable improve fonts handle

* #6214 hide improve fonts checkbox

* #6214 fix margins

* #6814 fix The "Publish..." button is disappeared (#6815)

* #6770 - add e2e tests for loadMagicCommand (#6817)

* #6770 add loadMagicCommand test file

* #6770 add loadMagicCommandTest notebook

* #6769 - rename handlingCombinationOfCodeAndMagics (#6812)

* #6769 rename test file

* #6769 change test path and notebook name

* #6804: fix static import magic command (#6813)

* #6745 password beakerx widget (#6792)

* #6745 password beakerx widget

* #6745 fixed submit for password fields

* this config file should have a newline at the end

* #6783 another UI option: autosave (#6819)

* #6783 add auto_save option to default_config in python

* #6783 add auto_save option to type, model and widget

* #6783 fix defaults after merge

* #6783 auto_save option hangling

* use the standard keyword, see jupyterlab/jupyterlab#3841

* Spot/6820 (#6822)

* fix #6820 by changing the default

* hm, change both defaults.  and improve text for publication option

* src files should end with newline

* #6826 fix saving notebooks broken for doc folder (#6827)

* #6737: bold user error (#6828)

* #6810 fixed groovy magic initialization and handling empty dataframe (#6830)

* #6810 handling display of empty DataFrame

* #6810 default pandas display instead of TableDisplay

* #6810 fixed groovy magic initialization

* fix #6831 by lazily starting the groovy kernel (#6833)

* version 0.13.0

* polish conda packaging instructions

* pytest no longer needed due to upstream fix

* update mybinder links to 0.13.0

* #6832 disabling magic kernels on ipython shutdown (#6847)

* Add more colors (#6844)

*  #6643: change logging to slf4j-log4j12 (#6845)

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widgets (#6846)

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widget

* #6729: rename from com.twosigma.beakerx.widgets to com.twosigma.beakerx.widget

* make e2e tests work on Jupyter Lab Enhancement (#6850)

* add labx tests

* add lab e2e tests

* fix #6834 by making a tutorial for the output widget.  also add doc f… (#6857)

* fix #6834 by making a tutorial for the output widget.  also add doc for the UI options panel.

* missing file

* #6854 Reorganize tests (#6861)

* rename tests directory

* #6854 rename notebooks directory

* detecting app for tests (#6862)

* detecting app for tests

* change code for handler

* typo

* #6774 - make e2e tests for jvm repr (#6849)

* add kernel api tests

* #6774 clear notebook outputs

* rename test file

* default to notebook test suite

* #6837 - python init cells (#6866)

* create test notebook

* #6837 add tests

* #6837 typo

* #6837 add newline

* #6863 move files to correct directories (#6864)

* #6800: display widgets in Output (#6858)

* #6800: display widgets in Output

* #6800: display widgets in Output

* jarek/6856:  redirect only stderr or stdout to the widget (#6865)

* #6856:  redirect only stderr or stdout to the widget

* Merge branch 'master' into jarek/6856_direct_only_error_output

# Conflicts:
#	kernel/base/src/main/java/com/twosigma/beakerx/widget/Output.java
#	test/ipynb/groovy/JavaWidgetsTest.ipynb

* ipywidgets python api (#6868)

* #6860: rename packages (#6874)

* #6870: handle incorrect code (#6872)

* jarek/6869: language version upgrades (#6877)

* #6869: language version upgrades

* #6869: upgrade kotlin version 1.2.21

* refactoring of the tests for lab (#6875)

* refactoring of the text output tests

* refactoring tests

* refactoring tests of outputs

* refactoring tests for lab

* fix the grovyPlotActions test for lab

* fix sparkScala test for lab

* fix publish tests for lab

* fix test

* #6800: add general display method (#6871)

* #6730: tableDisplay update value (#6816)

* #6730: tableDisplay update value

* #6730: remove update cell method and add example for updating values by sendModel

* #6730: update cell by column name

* fix import (#6880)

* #6730 updatecell for tabledisplay in python (#6887)

* #6884 fix names of tests for renamed MIMEContainerFactory (#6885)

* fix test (#6882)

* improve STIL example (#6722) (#6873)

Fix the STIL example so that it accesses the StarTable object
cell values directly rather than just reading all the cells
into an internal array and accessing that.

The StarTable object requires random access for this to work;
tables read from CSV files are not random-access by default,
so the Tables.randomTable method has to get called on it.

In fact this is just moving the copy-to-internal-array step
out of the groovy and into the STIL library, so in this case
it doesn't make a huge amount of difference.  However, if the
input file was e.g. a FITS file, it would mean that data access
was strictly on-demand to the mapped disk file, and so potentially
much more efficient, especially for large files.

* #6878: read version (#6881)

*  refactor of e2e tests that checks tables elements (#6892)

* refactor code for table tests

* refactor of tests that checks tables elements

* #6809 sections of options should use tabs (#6883)

* #6809 add tab-pane wrapper in notebook

* #6809 keep styles in css file not in Widgets

* #6809 DOMUtils helper

* #6809 Remove style from Widget, notify parent when size changed

* #6809 remove style from widget

* #6809 SizeChangedMessage

* #6809 update size when needed

* #6809 OptionsWidget with tabs

* #6809 import styles from css, remove styles from widget, use OptionsWidget with tabs

* #6809 cleanup css

* #6809 CS

* #6809 fix lab

* #6809 fix

* #6809 remove duplicated "JVM Options" and "UI Options"

* #6855 adjust layout in our options tab (#6890)

* #6855 adjust banner layout

* #6809 fix truncated labels on tabs

* #6809 hide sync widget on tab change

* Spot/6495 (#6898)

* #6495 add first lines to test linking

* #6495 flesh out text

* #6495 flesh out text

* #6495 flesh out text

* #6495 finish up text

* #6495 polish up text

* e2e tests for Output containers (#6901)

* add tests for output containers

* add tests for output containers

* #6802 another UI option: improve fonts (#6900)

* #6809 add tab-pane wrapper in notebook

* #6809 keep styles in css file not in Widgets

* #6809 DOMUtils helper

* #6809 Remove style from Widget, notify parent when size changed

* #6809 remove style from widget

* #6809 SizeChangedMessage

* #6809 update size when needed

* #6809 OptionsWidget with tabs

* #6809 import styles from css, remove styles from widget, use OptionsWidget with tabs

* #6809 cleanup css

* #6809 CS

* #6809 fix lab

* #6809 fix

* #6802 wip

* #6802 improve fonts handling

* add e2e tests for python/tableAPI (#6911)

* add tests to notebook

* add tests for python tableAPI

* add tests for python tableAPI

* #6912 improved style in python install script (#6917)

* add e2e tests for code autocomplete  (#6915)

* add tests for autocomplete

* clean notebook outputs

* correct size of brand in options tab

* test change

*  fix autocomplete tests for lab (#6924)

* add tests for autocomplete

* clean notebook outputs

* fix autocomplete tests for lab

* #6719 pinned conda openjdk package version for docker build (#6923)

* pin openjdk version to address #6719

* tighter formatting

* fix typo in doc

* improve modularity

*  #6674 refactore state management with datastore, fix columns positioning and width (#6960)

* #6674 refactore state management with datastore

* #6674 implement column state reset

* #6674 update menu and filter positions on resize

* 6674 fix filters positioning, remove datatables

* 6674 clean dependencies

* 6674 use Map as columns state

* #6674 fix tests

* #6674 fix jquery import, fix column visibility

* #6674 better handle the header click for sorting (#6961)

* #6674 fix column state update (#6962)

* #6674 fix column state update

* #674 fix format for times update

* #6674 use reselect to memoize selectors

* #6674 render data bars

* #6674 fix viewport resizing

* #6674 fix header text and menu overlaping

* #6674 add dataGrid toggle dataBars menu item

* #6674 revert datatables removal

* #6674 add option to use the DataGrid or Datatables
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants