Skip to content
This repository was archived by the owner on Oct 11, 2023. It is now read-only.

Commit d4d13c1

Browse files
committed
Make glyphs and markers parametric in X and Y
1 parent 447622f commit d4d13c1

File tree

6 files changed

+57
-44
lines changed

6 files changed

+57
-44
lines changed

bokeh/src/main/scala/Scalar.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.continuum.bokeh
2+
3+
import scala.annotation.implicitNotFound
4+
5+
@implicitNotFound(msg="Can't find Scalar type class for type ${T}.")
6+
class Scalar[T]
7+
8+
object Scalar {
9+
implicit val IntScalar = new Scalar[Int]
10+
implicit val DoubleScalar = new Scalar[Double]
11+
}

bokeh/src/main/scala/models/Glyphs.scala

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package io.continuum.bokeh
22

3-
@model abstract class Glyph /*[X:Numeric, Y:Numeric]*/ extends Model with Vectorization {
4-
type X = Double
5-
type Y = Double
3+
import Json.Writer
64

5+
@model abstract class Glyph[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Model with Vectorization {
76
object visible extends Field[Boolean](true)
87
}
98

10-
@model class AnnularWedge /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
9+
@model class AnnularWedge[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
1110
object x extends Vectorized[X]
1211
object y extends Vectorized[Y]
1312
object inner_radius extends Spatial[Double] with NonNegative
@@ -17,14 +16,14 @@ package io.continuum.bokeh
1716
object direction extends Field[Direction]
1817
}
1918

20-
@model class Annulus /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
19+
@model class Annulus[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
2120
object x extends Vectorized[X]
2221
object y extends Vectorized[Y]
2322
object inner_radius extends Spatial[Double] with NonNegative
2423
object outer_radius extends Spatial[Double] with NonNegative
2524
}
2625

27-
@model class Arc /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
26+
@model class Arc[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
2827
object x extends Vectorized[X]
2928
object y extends Vectorized[Y]
3029
object radius extends Spatial[Double] with NonNegative
@@ -33,7 +32,7 @@ package io.continuum.bokeh
3332
object direction extends Field[Direction]
3433
}
3534

36-
@model class Bezier /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
35+
@model class Bezier[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
3736
object x0 extends Vectorized[X]
3837
object y0 extends Vectorized[Y]
3938
object x1 extends Vectorized[X]
@@ -44,7 +43,7 @@ package io.continuum.bokeh
4443
object cy1 extends Vectorized[Y]
4544
}
4645

47-
@model class ImageRGBA /*[X:Numeric, Y:Numeric]*/ extends Glyph {
46+
@model class ImageRGBA[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] {
4847
object image extends Vectorized[Array[Double]]
4948
object rows extends Vectorized[Int]
5049
object cols extends Vectorized[Int]
@@ -65,11 +64,11 @@ package io.continuum.bokeh
6564
}
6665
}
6766

68-
@model class Image /*[X:Numeric, Y:Numeric]*/ extends ImageRGBA {
67+
@model class Image[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends ImageRGBA[X, Y] {
6968
object color_mapper extends Field[ColorMapper]
7069
}
7170

72-
@model class ImageURL /*[X:Numeric, Y:Numeric]*/ extends Glyph {
71+
@model class ImageURL[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] {
7372
object url extends Vectorized[String]
7473
object x extends Vectorized[X]
7574
object y extends Vectorized[Y]
@@ -83,42 +82,42 @@ package io.continuum.bokeh
8382
object retry_timeout extends Field[Int](0)
8483
}
8584

86-
@model class Line /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
85+
@model class Line[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
8786
object x extends Vectorized[X]
8887
object y extends Vectorized[Y]
8988
}
9089

91-
@model class MultiLine /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
90+
@model class MultiLine[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
9291
object xs extends Vectorized[List[X]]
9392
object ys extends Vectorized[List[Y]]
9493
}
9594

96-
@model class Oval /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
95+
@model class Oval[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
9796
object x extends Vectorized[X]
9897
object y extends Vectorized[Y]
9998
object width extends Spatial[Double] with NonNegative
10099
object height extends Spatial[Double] with NonNegative
101100
object angle extends Angular[Double]
102101
}
103102

104-
@model class Patch /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
103+
@model class Patch[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
105104
object x extends Vectorized[X]
106105
object y extends Vectorized[Y]
107106
}
108107

109-
@model class Patches /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps with FillProps {
108+
@model class Patches[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps with FillProps {
110109
object xs extends Vectorized[List[X]]
111110
object ys extends Vectorized[List[Y]]
112111
}
113112

114-
@model class Quad /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
113+
@model class Quad[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
115114
object left extends Vectorized[X]
116115
object right extends Vectorized[X]
117116
object bottom extends Vectorized[Y]
118117
object top extends Vectorized[Y]
119118
}
120119

121-
@model class Quadratic /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
120+
@model class Quadratic[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
122121
object x0 extends Vectorized[X]
123122
object y0 extends Vectorized[Y]
124123
object x1 extends Vectorized[X]
@@ -127,14 +126,14 @@ package io.continuum.bokeh
127126
object cy extends Vectorized[Y]
128127
}
129128

130-
@model class Ray /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
129+
@model class Ray[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
131130
object x extends Vectorized[X]
132131
object y extends Vectorized[Y]
133132
object length extends Spatial[Double] with NonNegative
134133
object angle extends Angular[Double]
135134
}
136135

137-
@model class Rect /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
136+
@model class Rect[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
138137
object x extends Vectorized[X]
139138
object y extends Vectorized[Y]
140139
object width extends Spatial[Double] with NonNegative
@@ -143,14 +142,14 @@ package io.continuum.bokeh
143142
object dilate extends Field[Boolean]
144143
}
145144

146-
@model class Segment /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps {
145+
@model class Segment[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps {
147146
object x0 extends Vectorized[X]
148147
object y0 extends Vectorized[Y]
149148
object x1 extends Vectorized[X]
150149
object y1 extends Vectorized[Y]
151150
}
152151

153-
@model class Text /*[X: Numeric, Y: Numeric]*/ extends Glyph with TextProps {
152+
@model class Text[X: Scalar:Default:Writer, Y: Scalar:Default:Writer] extends Glyph[X, Y] with TextProps {
154153
object x extends Vectorized[X]
155154
object y extends Vectorized[Y]
156155
object text extends Vectorized[String]
@@ -159,7 +158,7 @@ package io.continuum.bokeh
159158
object y_offset extends Spatial[Double]
160159
}
161160

162-
@model class Wedge /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
161+
@model class Wedge[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with FillProps with LineProps {
163162
object x extends Vectorized[X]
164163
object y extends Vectorized[Y]
165164
object radius extends Spatial[Double] with NonNegative
@@ -168,7 +167,7 @@ package io.continuum.bokeh
168167
object direction extends Field[Direction]
169168
}
170169

171-
@model class Gear /*[X:Numeric, Y:Numeric]*/ extends Glyph with LineProps with FillProps {
170+
@model class Gear[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Glyph[X, Y] with LineProps with FillProps {
172171
object x extends Vectorized[X]
173172
object y extends Vectorized[Y]
174173
object angle extends Angular[Double]
Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,42 @@
11
package io.continuum.bokeh
22

3-
@model sealed abstract class Marker /*[X:Numeric, Y:Numeric]*/ extends Glyph with FillProps with LineProps {
3+
import Json.Writer
4+
5+
@model sealed abstract class Marker[X:Scalar:Default:Writer, Y:Scalar:Default:Writer]
6+
extends Glyph[X, Y] with FillProps with LineProps {
47
object x extends Spatial[X]
58
object y extends Spatial[Y]
69
object size extends Spatial[Double](SpatialUnits.Screen) with NonNegative
710
object angle extends Angular[Double]
811
}
912

10-
@model class Asterisk extends Marker
13+
@model class Asterisk[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
1114

12-
@model class Circle extends Marker {
15+
@model class Circle[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y] {
1316
object radius extends Spatial[Double] with NonNegative
1417
object radius_dimension extends Field[Dimension]
1518
}
1619

17-
@model class CircleCross extends Marker
20+
@model class CircleCross[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
1821

19-
@model class CircleX extends Marker
22+
@model class CircleX[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
2023

21-
@model class Cross extends Marker
24+
@model class Cross[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
2225

23-
@model class Diamond extends Marker
26+
@model class Diamond[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
2427

25-
@model class DiamondCross extends Marker
28+
@model class DiamondCross[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
2629

27-
@model class InvertedTriangle extends Marker
30+
@model class InvertedTriangle[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
2831

29-
@model class Square extends Marker
32+
@model class Square[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
3033

31-
@model class SquareCross extends Marker
34+
@model class SquareCross[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
3235

33-
@model class SquareX extends Marker
36+
@model class SquareX[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
3437

35-
@model class Triangle extends Marker
38+
@model class Triangle[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y]
3639

37-
@model class PlainX extends Marker {
40+
@model class PlainX[X:Scalar:Default:Writer, Y:Scalar:Default:Writer] extends Marker[X, Y] {
3841
override val typeName = "X"
3942
}

bokeh/src/main/scala/models/Plots.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ package io.continuum.bokeh
5555

5656
object responsive extends Field[Boolean](false)
5757

58-
def addGlyph(glyph: Glyph): GlyphRenderer = {
58+
def addGlyph(glyph: Glyph[_, _]): GlyphRenderer = {
5959
addGlyph(new ColumnDataSource(), glyph)
6060
}
6161

62-
def addGlyph(source: DataSource, glyph: Glyph): GlyphRenderer = {
62+
def addGlyph(source: DataSource, glyph: Glyph[_, _]): GlyphRenderer = {
6363
val renderer = new GlyphRenderer().data_source(source).glyph(glyph)
6464
renderers <<= (_ :+ renderer)
6565
renderer

bokeh/src/main/scala/models/Renderers.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ package io.continuum.bokeh
3030
// TODO: object server_data_source extends Field[ServerDataSource]
3131
object data_source extends Field[DataSource](() => new ColumnDataSource())
3232

33-
object glyph extends Field[Glyph]
34-
object hover_glyph extends Field[Glyph]
35-
object selection_glyph extends Field[Glyph]
36-
object nonselection_glyph extends Field[Glyph]
33+
object glyph extends Field[Glyph[_, _]]
34+
object hover_glyph extends Field[Glyph[_, _]]
35+
object selection_glyph extends Field[Glyph[_, _]]
36+
object nonselection_glyph extends Field[Glyph[_, _]]
3737

3838
object x_range_name extends Field[String]("default")
3939
object y_range_name extends Field[String]("default")

bokeh/src/main/scala/models/Sources.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.continuum.bokeh
22

3-
case class Selected0d(indices: List[Int] = Nil, glyph: Option[Glyph] = None)
3+
case class Selected0d(indices: List[Int] = Nil, glyph: Option[Glyph[_, _]] = None)
44
case class Selected1d(indices: List[Int] = Nil)
55
case class Selected2d(indices: List[List[Int]] = Nil)
66

0 commit comments

Comments
 (0)