Skip to content

Commit 41d61c5

Browse files
committed
work on fmin fmax
1 parent c30aa99 commit 41d61c5

File tree

13 files changed

+150
-30
lines changed

13 files changed

+150
-30
lines changed
0 Bytes
Binary file not shown.

Examples/Methods/op_catalog.csv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ dayofyear,date_col_0.dayofyear(),e,y,n,y,n,n
4444
exp,x.exp(),e,y,y,y,y,y
4545
expm1,y.expm1(),e,y,y,n,n,n
4646
floor,z.floor(),e,y,y,y,y,y
47-
fmax,row_id.fmax(x),e,y,n,n,n,n
48-
fmin,row_id.fmin(x),e,y,n,n,n,n
47+
fmax,row_id.fmax(x),e,y,y,y,y,y
48+
fmin,row_id.fmin(x),e,y,y,y,y,y
4949
format_date,date_col_0.format_date(),e,y,n,y,n,n
5050
format_datetime,datetime_col_0.format_datetime(),e,y,n,y,n,n
5151
if_else,"a.if_else(x, y)",e,y,y,y,y,y

build/lib/data_algebra/db_model.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,25 @@ def _db_mapv(dbmodel, expression):
187187

188188

189189
def _db_maximum_expr(dbmodel, expression):
190+
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
191+
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
192+
return (
193+
"CASE"
194+
+ " WHEN "
195+
+ "((" + y_expr + " IS NULL) OR "
196+
+ "(" + x_expr + ") >= (" + y_expr + "))"
197+
+ " THEN "
198+
+ x_expr
199+
+ " WHEN "
200+
+ "((" + x_expr + " IS NULL) OR "
201+
+ "(" + y_expr + ") >= (" + x_expr + "))"
202+
+ " THEN "
203+
+ y_expr
204+
+ " ELSE NULL END"
205+
)
206+
207+
208+
def _db_fmax_expr(dbmodel, expression):
190209
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
191210
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
192211
return (
@@ -212,6 +231,25 @@ def _db_maximum_expr(dbmodel, expression):
212231

213232

214233
def _db_minimum_expr(dbmodel, expression):
234+
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
235+
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
236+
return (
237+
"CASE"
238+
+ " WHEN "
239+
+ "((" + y_expr + " IS NULL) OR "
240+
+ "(" + x_expr + ") <= (" + y_expr + "))"
241+
+ " THEN "
242+
+ x_expr
243+
+ " WHEN "
244+
+ "((" + x_expr + " IS NULL) OR "
245+
+ "(" + y_expr + ") <= (" + x_expr + "))"
246+
+ " THEN "
247+
+ y_expr
248+
+ " ELSE NULL END"
249+
)
250+
251+
252+
def _db_fmin_expr(dbmodel, expression):
215253
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
216254
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
217255
return (
@@ -494,7 +532,9 @@ def _base_Sunday(dbmodel, expression):
494532
"if_else": _db_if_else_expr,
495533
"is_in": _db_is_in_expr,
496534
"maximum": _db_maximum_expr,
535+
"fmax": _db_fmax_expr,
497536
"minimum": _db_minimum_expr,
537+
"fmin": _db_fmin_expr,
498538
"count": _db_count_expr,
499539
"concat": _db_concat_expr,
500540
"coalesce": _db_coalesce_expr,

build/lib/data_algebra/expr_rep.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -563,25 +563,25 @@ def abs(self):
563563

564564
def maximum(self, other):
565565
"""
566-
Return per row maximum of items and other (vectorized).
566+
Return per row maximum of items and other (propogate missing, vectorized).
567567
"""
568568
return self.__op_expr__("maximum", other, method=True, inline=False)
569569

570570
def minimum(self, other):
571571
"""
572-
Return per row minimum of items and other (vectorized).
572+
Return per row minimum of items and other (propogate missing, vectorized).
573573
"""
574574
return self.__op_expr__("minimum", other, method=True, inline=False)
575575

576576
def fmax(self, other):
577577
"""
578-
Return per row fmax of items and other (vectorized).
578+
Return per row fmax of items and other (ignore missing, vectorized).
579579
"""
580580
return self.__op_expr__("fmax", other, inline=False)
581581

582582
def fmin(self, other):
583583
"""
584-
Return per row fmin of items and other (vectorized).
584+
Return per row fmin of items and other (ignore missing, vectorized).
585585
"""
586586
return self.__op_expr__("fmin", other, inline=False)
587587

coverage.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ data_algebra/data_model.py 40 17 58%
115115
data_algebra/data_ops.py 1228 208 83%
116116
data_algebra/data_ops_types.py 82 34 59%
117117
data_algebra/data_ops_utils.py 49 6 88%
118-
data_algebra/db_model.py 860 92 89%
118+
data_algebra/db_model.py 868 98 89%
119119
data_algebra/expr_parse.py 35 0 100%
120120
data_algebra/expr_rep.py 620 100 84%
121121
data_algebra/flow_text.py 17 0 100%
@@ -128,7 +128,7 @@ data_algebra/python3_lark.py 1 0 100%
128128
data_algebra/test_util.py 246 45 82%
129129
data_algebra/util.py 139 29 79%
130130
----------------------------------------------------------
131-
TOTAL 5162 903 83%
131+
TOTAL 5170 909 82%
132132

133133

134-
============================= 235 passed in 22.57s =============================
134+
============================= 235 passed in 22.50s =============================

data_algebra/db_model.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,25 @@ def _db_mapv(dbmodel, expression):
187187

188188

189189
def _db_maximum_expr(dbmodel, expression):
190+
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
191+
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
192+
return (
193+
"CASE"
194+
+ " WHEN "
195+
+ "((" + y_expr + " IS NULL) OR "
196+
+ "(" + x_expr + ") >= (" + y_expr + "))"
197+
+ " THEN "
198+
+ x_expr
199+
+ " WHEN "
200+
+ "((" + x_expr + " IS NULL) OR "
201+
+ "(" + y_expr + ") >= (" + x_expr + "))"
202+
+ " THEN "
203+
+ y_expr
204+
+ " ELSE NULL END"
205+
)
206+
207+
208+
def _db_fmax_expr(dbmodel, expression):
190209
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
191210
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
192211
return (
@@ -212,6 +231,25 @@ def _db_maximum_expr(dbmodel, expression):
212231

213232

214233
def _db_minimum_expr(dbmodel, expression):
234+
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
235+
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
236+
return (
237+
"CASE"
238+
+ " WHEN "
239+
+ "((" + y_expr + " IS NULL) OR "
240+
+ "(" + x_expr + ") <= (" + y_expr + "))"
241+
+ " THEN "
242+
+ x_expr
243+
+ " WHEN "
244+
+ "((" + x_expr + " IS NULL) OR "
245+
+ "(" + y_expr + ") <= (" + x_expr + "))"
246+
+ " THEN "
247+
+ y_expr
248+
+ " ELSE NULL END"
249+
)
250+
251+
252+
def _db_fmin_expr(dbmodel, expression):
215253
x_expr = dbmodel.expr_to_sql(expression.args[0], want_inline_parens=True)
216254
y_expr = dbmodel.expr_to_sql(expression.args[1], want_inline_parens=True)
217255
return (
@@ -494,7 +532,9 @@ def _base_Sunday(dbmodel, expression):
494532
"if_else": _db_if_else_expr,
495533
"is_in": _db_is_in_expr,
496534
"maximum": _db_maximum_expr,
535+
"fmax": _db_fmax_expr,
497536
"minimum": _db_minimum_expr,
537+
"fmin": _db_fmin_expr,
498538
"count": _db_count_expr,
499539
"concat": _db_concat_expr,
500540
"coalesce": _db_coalesce_expr,

data_algebra/expr_rep.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -563,25 +563,25 @@ def abs(self):
563563

564564
def maximum(self, other):
565565
"""
566-
Return per row maximum of items and other (vectorized).
566+
Return per row maximum of items and other (propogate missing, vectorized).
567567
"""
568568
return self.__op_expr__("maximum", other, method=True, inline=False)
569569

570570
def minimum(self, other):
571571
"""
572-
Return per row minimum of items and other (vectorized).
572+
Return per row minimum of items and other (propogate missing, vectorized).
573573
"""
574574
return self.__op_expr__("minimum", other, method=True, inline=False)
575575

576576
def fmax(self, other):
577577
"""
578-
Return per row fmax of items and other (vectorized).
578+
Return per row fmax of items and other (ignore missing, vectorized).
579579
"""
580580
return self.__op_expr__("fmax", other, inline=False)
581581

582582
def fmin(self, other):
583583
"""
584-
Return per row fmin of items and other (vectorized).
584+
Return per row fmin of items and other (ignore missing, vectorized).
585585
"""
586586
return self.__op_expr__("fmin", other, inline=False)
587587

103 Bytes
Binary file not shown.

dist/data_algebra-1.1.2.tar.gz

123 Bytes
Binary file not shown.

docs/data_algebra/db_model.html

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,25 @@ <h1 class="modulename">
399399

400400

401401
<span class="k">def</span> <span class="nf">_db_maximum_expr</span><span class="p">(</span><span class="n">dbmodel</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
402+
<span class="n">x_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
403+
<span class="n">y_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
404+
<span class="k">return</span> <span class="p">(</span>
405+
<span class="s2">&quot;CASE&quot;</span>
406+
<span class="o">+</span> <span class="s2">&quot; WHEN &quot;</span>
407+
<span class="o">+</span> <span class="s2">&quot;((&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot; IS NULL) OR &quot;</span>
408+
<span class="o">+</span> <span class="s2">&quot;(&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot;) &gt;= (&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot;))&quot;</span>
409+
<span class="o">+</span> <span class="s2">&quot; THEN &quot;</span>
410+
<span class="o">+</span> <span class="n">x_expr</span>
411+
<span class="o">+</span> <span class="s2">&quot; WHEN &quot;</span>
412+
<span class="o">+</span> <span class="s2">&quot;((&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot; IS NULL) OR &quot;</span>
413+
<span class="o">+</span> <span class="s2">&quot;(&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot;) &gt;= (&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot;))&quot;</span>
414+
<span class="o">+</span> <span class="s2">&quot; THEN &quot;</span>
415+
<span class="o">+</span> <span class="n">y_expr</span>
416+
<span class="o">+</span> <span class="s2">&quot; ELSE NULL END&quot;</span>
417+
<span class="p">)</span>
418+
419+
420+
<span class="k">def</span> <span class="nf">_db_fmax_expr</span><span class="p">(</span><span class="n">dbmodel</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
402421
<span class="n">x_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
403422
<span class="n">y_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
404423
<span class="k">return</span> <span class="p">(</span>
@@ -424,6 +443,25 @@ <h1 class="modulename">
424443

425444

426445
<span class="k">def</span> <span class="nf">_db_minimum_expr</span><span class="p">(</span><span class="n">dbmodel</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
446+
<span class="n">x_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
447+
<span class="n">y_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
448+
<span class="k">return</span> <span class="p">(</span>
449+
<span class="s2">&quot;CASE&quot;</span>
450+
<span class="o">+</span> <span class="s2">&quot; WHEN &quot;</span>
451+
<span class="o">+</span> <span class="s2">&quot;((&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot; IS NULL) OR &quot;</span>
452+
<span class="o">+</span> <span class="s2">&quot;(&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot;) &lt;= (&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot;))&quot;</span>
453+
<span class="o">+</span> <span class="s2">&quot; THEN &quot;</span>
454+
<span class="o">+</span> <span class="n">x_expr</span>
455+
<span class="o">+</span> <span class="s2">&quot; WHEN &quot;</span>
456+
<span class="o">+</span> <span class="s2">&quot;((&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot; IS NULL) OR &quot;</span>
457+
<span class="o">+</span> <span class="s2">&quot;(&quot;</span> <span class="o">+</span> <span class="n">y_expr</span> <span class="o">+</span> <span class="s2">&quot;) &lt;= (&quot;</span> <span class="o">+</span> <span class="n">x_expr</span> <span class="o">+</span> <span class="s2">&quot;))&quot;</span>
458+
<span class="o">+</span> <span class="s2">&quot; THEN &quot;</span>
459+
<span class="o">+</span> <span class="n">y_expr</span>
460+
<span class="o">+</span> <span class="s2">&quot; ELSE NULL END&quot;</span>
461+
<span class="p">)</span>
462+
463+
464+
<span class="k">def</span> <span class="nf">_db_fmin_expr</span><span class="p">(</span><span class="n">dbmodel</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
427465
<span class="n">x_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
428466
<span class="n">y_expr</span> <span class="o">=</span> <span class="n">dbmodel</span><span class="o">.</span><span class="n">expr_to_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">want_inline_parens</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
429467
<span class="k">return</span> <span class="p">(</span>
@@ -706,7 +744,9 @@ <h1 class="modulename">
706744
<span class="s2">&quot;if_else&quot;</span><span class="p">:</span> <span class="n">_db_if_else_expr</span><span class="p">,</span>
707745
<span class="s2">&quot;is_in&quot;</span><span class="p">:</span> <span class="n">_db_is_in_expr</span><span class="p">,</span>
708746
<span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="n">_db_maximum_expr</span><span class="p">,</span>
747+
<span class="s2">&quot;fmax&quot;</span><span class="p">:</span> <span class="n">_db_fmax_expr</span><span class="p">,</span>
709748
<span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="n">_db_minimum_expr</span><span class="p">,</span>
749+
<span class="s2">&quot;fmin&quot;</span><span class="p">:</span> <span class="n">_db_fmin_expr</span><span class="p">,</span>
710750
<span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="n">_db_count_expr</span><span class="p">,</span>
711751
<span class="s2">&quot;concat&quot;</span><span class="p">:</span> <span class="n">_db_concat_expr</span><span class="p">,</span>
712752
<span class="s2">&quot;coalesce&quot;</span><span class="p">:</span> <span class="n">_db_coalesce_expr</span><span class="p">,</span>

0 commit comments

Comments
 (0)