kumi 0.0.15 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/golden/cascade_logic/schema.kumi +3 -1
  4. data/lib/kumi/analyzer.rb +11 -9
  5. data/lib/kumi/core/analyzer/passes/broadcast_detector.rb +0 -81
  6. data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +18 -20
  7. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +67 -0
  8. data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +0 -36
  9. data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -39
  10. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +8 -191
  11. data/lib/kumi/core/compiler/access_builder.rb +20 -10
  12. data/lib/kumi/core/compiler/access_codegen.rb +61 -0
  13. data/lib/kumi/core/compiler/access_emit/base.rb +173 -0
  14. data/lib/kumi/core/compiler/access_emit/each_indexed.rb +56 -0
  15. data/lib/kumi/core/compiler/access_emit/materialize.rb +45 -0
  16. data/lib/kumi/core/compiler/access_emit/ravel.rb +50 -0
  17. data/lib/kumi/core/compiler/access_emit/read.rb +32 -0
  18. data/lib/kumi/core/ir/execution_engine/interpreter.rb +36 -181
  19. data/lib/kumi/core/ir/execution_engine/values.rb +8 -8
  20. data/lib/kumi/core/ir/execution_engine.rb +3 -19
  21. data/lib/kumi/dev/parse.rb +12 -12
  22. data/lib/kumi/runtime/executable.rb +22 -175
  23. data/lib/kumi/runtime/run.rb +105 -0
  24. data/lib/kumi/schema.rb +8 -13
  25. data/lib/kumi/version.rb +1 -1
  26. data/lib/kumi.rb +3 -2
  27. metadata +10 -25
  28. data/BACKLOG.md +0 -34
  29. data/config/functions.yaml +0 -352
  30. data/docs/functions/analyzer_integration.md +0 -199
  31. data/docs/functions/signatures.md +0 -171
  32. data/examples/hash_objects_demo.rb +0 -138
  33. data/lib/kumi/core/analyzer/passes/function_signature_pass.rb +0 -199
  34. data/lib/kumi/core/analyzer/passes/type_consistency_checker.rb +0 -48
  35. data/lib/kumi/core/functions/dimension.rb +0 -98
  36. data/lib/kumi/core/functions/dtypes.rb +0 -20
  37. data/lib/kumi/core/functions/errors.rb +0 -11
  38. data/lib/kumi/core/functions/kernel_adapter.rb +0 -45
  39. data/lib/kumi/core/functions/loader.rb +0 -119
  40. data/lib/kumi/core/functions/registry_v2.rb +0 -68
  41. data/lib/kumi/core/functions/shape.rb +0 -70
  42. data/lib/kumi/core/functions/signature.rb +0 -122
  43. data/lib/kumi/core/functions/signature_parser.rb +0 -86
  44. data/lib/kumi/core/functions/signature_resolver.rb +0 -272
  45. data/lib/kumi/kernels/ruby/aggregate_core.rb +0 -105
  46. data/lib/kumi/kernels/ruby/datetime_scalar.rb +0 -21
  47. data/lib/kumi/kernels/ruby/mask_scalar.rb +0 -15
  48. data/lib/kumi/kernels/ruby/scalar_core.rb +0 -63
  49. data/lib/kumi/kernels/ruby/string_scalar.rb +0 -19
  50. data/lib/kumi/kernels/ruby/vector_struct.rb +0 -39
@@ -1,105 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kumi
4
- module Kernels
5
- module Ruby
6
- module AggregateCore
7
- module_function
8
-
9
- def kumi_sum(enum, skip_nulls: true, min_count: 0)
10
- total = 0
11
- count = 0
12
- enum.each do |x|
13
- next if skip_nulls && x.nil?
14
-
15
- total += x
16
- count += 1
17
- end
18
- return nil if count < min_count
19
-
20
- total
21
- end
22
-
23
- def kumi_min(enum, skip_nulls: true, min_count: 0)
24
- best = nil
25
- count = 0
26
- enum.each do |x|
27
- next if skip_nulls && x.nil?
28
-
29
- best = x if best.nil? || x < best
30
- count += 1
31
- end
32
- return nil if count < min_count
33
-
34
- best
35
- end
36
-
37
- def kumi_max(enum, skip_nulls: true, min_count: 0)
38
- best = nil
39
- count = 0
40
- enum.each do |x|
41
- next if skip_nulls && x.nil?
42
-
43
- best = x if best.nil? || x > best
44
- count += 1
45
- end
46
- return nil if count < min_count
47
-
48
- best
49
- end
50
-
51
- def kumi_mean(enum, skip_nulls: true, min_count: 0)
52
- total = 0.0
53
- count = 0
54
- enum.each do |x|
55
- next if skip_nulls && x.nil?
56
-
57
- total += x
58
- count += 1
59
- end
60
- return nil if count < [min_count, 1].max
61
-
62
- total / count
63
- end
64
-
65
- def kumi_any(enum, skip_nulls: true, min_count: 0)
66
- count = 0
67
- enum.each do |x|
68
- next if skip_nulls && x.nil?
69
-
70
- return true if x
71
- count += 1
72
- end
73
- return nil if count < min_count
74
-
75
- false
76
- end
77
-
78
- def kumi_all(enum, skip_nulls: true, min_count: 0)
79
- count = 0
80
- enum.each do |x|
81
- next if skip_nulls && x.nil?
82
-
83
- return false unless x
84
- count += 1
85
- end
86
- return nil if count < min_count
87
-
88
- true
89
- end
90
-
91
- def kumi_count(enum, skip_nulls: true, min_count: 0)
92
- count = 0
93
- enum.each do |x|
94
- next if skip_nulls && x.nil?
95
-
96
- count += 1
97
- end
98
- return nil if count < min_count
99
-
100
- count
101
- end
102
- end
103
- end
104
- end
105
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "date"
4
-
5
- module Kumi
6
- module Kernels
7
- module Ruby
8
- module DatetimeScalar
9
- module_function
10
-
11
- def dt_add_days(d, n)
12
- d + n
13
- end
14
-
15
- def dt_diff_days(d1, d2)
16
- (d1 - d2).to_i
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kumi
4
- module Kernels
5
- module Ruby
6
- module MaskScalar
7
- module_function
8
-
9
- def where(condition, if_true, if_false)
10
- condition ? if_true : if_false
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kumi
4
- module Kernels
5
- module Ruby
6
- module ScalarCore
7
- module_function
8
-
9
- def kumi_add(a, b)
10
- a + b
11
- end
12
-
13
- def kumi_sub(a, b)
14
- a - b
15
- end
16
-
17
- def kumi_mul(a, b)
18
- a * b
19
- end
20
-
21
- def kumi_div(a, b)
22
- a / b.to_f
23
- end
24
-
25
- def kumi_eq(a, b)
26
- a == b
27
- end
28
-
29
- def kumi_gt(a, b)
30
- a > b
31
- end
32
-
33
- def kumi_gte(a, b)
34
- a >= b
35
- end
36
-
37
- def kumi_lt(a, b)
38
- a < b
39
- end
40
-
41
- def kumi_lte(a, b)
42
- a <= b
43
- end
44
-
45
- def kumi_ne(a, b)
46
- a != b
47
- end
48
-
49
- def kumi_and(a, b)
50
- a && b
51
- end
52
-
53
- def kumi_or(a, b)
54
- a || b
55
- end
56
-
57
- def kumi_not(a)
58
- !a
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kumi
4
- module Kernels
5
- module Ruby
6
- module StringScalar
7
- module_function
8
-
9
- def str_concat(a, b)
10
- "#{a}#{b}"
11
- end
12
-
13
- def str_length(s)
14
- s&.length
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kumi
4
- module Kernels
5
- module Ruby
6
- module VectorStruct
7
- module_function
8
-
9
- def size(vec)
10
- vec&.size
11
- end
12
-
13
- def join_zip(left, right)
14
- raise NotImplementedError, "join operations should be implemented in IR/VM"
15
- end
16
-
17
- def join_product(left, right)
18
- raise NotImplementedError, "join operations should be implemented in IR/VM"
19
- end
20
-
21
- def align_to(vec, target_axes)
22
- raise NotImplementedError, "align_to should be implemented in IR/VM"
23
- end
24
-
25
- def lift(vec, indices)
26
- raise NotImplementedError, "lift should be implemented in IR/VM"
27
- end
28
-
29
- def flatten(*args)
30
- raise NotImplementedError, "flatten should be implemented in IR/VM"
31
- end
32
-
33
- def take(values, indices)
34
- raise NotImplementedError, "take should be implemented in IR/VM"
35
- end
36
- end
37
- end
38
- end
39
- end