Skip to content

Commit eec3369

Browse files
committed
Add Exp inverse functions of Log
Signed-off-by: Jason T. Brown <jason@astraea.earth>
1 parent 2d78b8a commit eec3369

4 files changed

Lines changed: 76 additions & 1 deletion

File tree

core/src/main/scala/astraea/spark/rasterframes/RasterFunctions.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,4 +328,20 @@ trait RasterFunctions {
328328
def log1p(tileCol: Column): TypedColumn[Any, Tile] =
329329
Log1p(tileCol)
330330

331+
/** Exponential of cell values */
332+
def exp(tileCol: Column): TypedColumn[Any, Tile] =
333+
Exp(tileCol)
334+
335+
/** Ten to the power of cell values */
336+
def exp10(tileCol: Column): TypedColumn[Any, Tile] =
337+
Exp10(tileCol)
338+
339+
/** Two to the power of cell values */
340+
def exp2(tileCol: Column): TypedColumn[Any, Tile] =
341+
Exp2(tileCol)
342+
343+
/** Exponential of cell values, less one*/
344+
def expm1(tileCol: Column): TypedColumn[Any, Tile] =
345+
ExpM1(tileCol)
346+
331347
}

core/src/main/scala/astraea/spark/rasterframes/expressions/package.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ package object expressions {
8282
registry.registerExpression[Log10]("rf_log10")
8383
registry.registerExpression[Log2]("rf_log2")
8484
registry.registerExpression[Log1p]("rf_log1p")
85+
registry.registerExpression[Exp]("rf_exp")
86+
registry.registerExpression[Exp10]("rf_exp10")
87+
registry.registerExpression[Exp2]("rf_exp2")
88+
registry.registerExpression[ExpM1]("rf_expm1")
8589
registry.registerExpression[TileToArrayDouble]("rf_tile_to_array_double")
8690
registry.registerExpression[TileToArrayInt]("rf_tile_to_array_int")
8791
registry.registerExpression[DataCells]("rf_data_cells")

core/src/test/scala/astraea/spark/rasterframes/RasterFunctionsSpec.scala

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,5 +607,56 @@ class RasterFunctionsSpec extends FunSpec
607607
assert(df_0.select(log10(local_subtract($"tile", lit(0.01)))).as[ProjectedRasterTile].first().isNoDataTile)
608608

609609
}
610+
611+
it("should take exponential") {
612+
val df = Seq(six).toDF("tile")
613+
614+
// exp inverses log
615+
assertEqual(
616+
df.select(exp(log($"tile"))).as[ProjectedRasterTile].first(),
617+
six
618+
)
619+
620+
// base 2
621+
assertEqual(
622+
df.select(exp2(log2($"tile"))).as[ProjectedRasterTile].first(),
623+
six)
624+
625+
// base 10
626+
assertEqual(
627+
df.select(exp10(log10($"tile"))).as[ProjectedRasterTile].first(),
628+
six)
629+
630+
// plus/minus 1
631+
assertEqual(
632+
df.select(expm1(log1p($"tile"))).as[ProjectedRasterTile].first(),
633+
six)
634+
635+
// SQL
636+
assertEqual(
637+
df.selectExpr("rf_exp(rf_log(tile))").as[ProjectedRasterTile].first(),
638+
six)
639+
640+
// SQL base 10
641+
assertEqual(
642+
df.selectExpr("rf_exp10(rf_log10(tile))").as[ProjectedRasterTile].first(),
643+
six)
644+
645+
// SQL base 2
646+
assertEqual(
647+
df.selectExpr("rf_exp2(rf_log2(tile))").as[ProjectedRasterTile].first(),
648+
six)
649+
650+
// SQL expm1
651+
assertEqual(
652+
df.selectExpr("rf_expm1(rf_log1p(tile))").as[ProjectedRasterTile].first(),
653+
six)
654+
655+
checkDocs("rf_exp")
656+
checkDocs("rf_exp10")
657+
checkDocs("rf_exp2")
658+
checkDocs("rf_expm1")
659+
660+
}
610661
}
611662
}

pyrasterframes/python/pyrasterframes/rasterfunctions.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,11 @@ def _(data_tile, mask_tile, mask_value):
239239
'log': 'Performs cell-wise natural logarithm',
240240
'log10': 'Performs cell-wise logartithm with base 10',
241241
'log2': 'Performs cell-wise logartithm with base 2',
242-
'log1p': 'Performs natural logarithm of cell values plus one'
242+
'log1p': 'Performs natural logarithm of cell values plus one',
243+
'exp': 'Performs cell-wise exponential',
244+
'exp2': 'Compute 2 to the power of cell values',
245+
'exp10': 'Compute 10 to the power of cell values',
246+
'exp1m': 'Performs cell-wise exponential, then subtract one',
243247

244248
# ------- JTS functions -------
245249
# spatial constructors

0 commit comments

Comments
 (0)