zelkova 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/zelkova/graph.rb +20 -22
- data/lib/zelkova/node.rb +6 -4
- data/lib/zelkova/version.rb +1 -1
- data/lib/zelkova.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99845c2d87f2d9f7e4c66c96912a9aac723677f4069a205bdb5e0979c3be035c
|
4
|
+
data.tar.gz: 6c1d6d6e4cb6d5c53bd56dec2319cbb1d43756d11bcd955afd9a7a9b03ddafac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75ac38244fb0a07394dc799bda375a930431ec670fe706ce4ec826504cdd22acb6777f73f8a2b5f4834dd670a103eea7ac2b0bf82aefdb190fb08b738a68d53b
|
7
|
+
data.tar.gz: 4622edc7572b76f1f0b938e1cfa0e9f38896842c1debfe937c63acc7862a9e37576727b083c305fb1665f7597f4b9a5990d9e96c60a5ff36de6d4ae63a51dbf7
|
data/Gemfile.lock
CHANGED
data/lib/zelkova/graph.rb
CHANGED
@@ -18,16 +18,28 @@ class Zelkova::Graph
|
|
18
18
|
sig { returns(Integer) }
|
19
19
|
attr_reader :depth
|
20
20
|
|
21
|
-
sig {
|
22
|
-
|
21
|
+
sig { returns(Integer) }
|
22
|
+
attr_accessor :radius
|
23
|
+
|
24
|
+
sig { params(radius: T.nilable(Integer)).void }
|
25
|
+
def initialize(radius = 2)
|
23
26
|
@root_node = T.let(nil, T.nilable(Zelkova::Node))
|
24
27
|
@nodes = T.let([], T::Array[Zelkova::Node])
|
25
28
|
@depth = T.let(0, Integer)
|
29
|
+
|
30
|
+
@radius = T.let(T.must(radius), Integer)
|
31
|
+
end
|
32
|
+
|
33
|
+
sig { void }
|
34
|
+
def reset
|
35
|
+
@root_node = nil
|
36
|
+
@nodes = []
|
37
|
+
@depth = 0
|
26
38
|
end
|
27
39
|
|
28
|
-
sig { params(word: String).returns(Zelkova::Node) }
|
29
|
-
def add_node(word)
|
30
|
-
node = Zelkova::Node.new(word, self)
|
40
|
+
sig { params(word: String, metadata: T.nilable(T::Hash[T.untyped, T.untyped])).returns(Zelkova::Node) }
|
41
|
+
def add_node(word, metadata = {})
|
42
|
+
node = Zelkova::Node.new(word, self, metadata)
|
31
43
|
nodes << node
|
32
44
|
|
33
45
|
if @root_node.nil?
|
@@ -60,9 +72,9 @@ class Zelkova::Graph
|
|
60
72
|
node
|
61
73
|
end
|
62
74
|
|
63
|
-
sig { params(query: String).returns(T::Array[
|
75
|
+
sig { params(query: String).returns(T::Array[T::Hash[Zelkova::Node, Float]]) }
|
64
76
|
def search(query)
|
65
|
-
radius =
|
77
|
+
radius = @radius
|
66
78
|
candidate_nodes = []
|
67
79
|
candidate_edges = []
|
68
80
|
|
@@ -85,20 +97,6 @@ class Zelkova::Graph
|
|
85
97
|
end
|
86
98
|
|
87
99
|
candidate_nodes.sort_by! { |candidate_node| candidate_node[:distance] }
|
88
|
-
candidate_nodes
|
100
|
+
candidate_nodes
|
89
101
|
end
|
90
102
|
end
|
91
|
-
|
92
|
-
# class Comparator
|
93
|
-
# extend T::Sig
|
94
|
-
|
95
|
-
# sig { params(dhash_1: String, dhash_2: String).returns(Integer) }
|
96
|
-
# def self.compare(dhash_1, dhash_2)
|
97
|
-
# hamming_distance = 0
|
98
|
-
# dhash_1.chars.each_with_index do |character, index|
|
99
|
-
# hamming_distance += 1 if character != dhash_2.chars[index]
|
100
|
-
# end
|
101
|
-
|
102
|
-
# hamming_distance + (dhash_1.length - dhash_2.length).abs
|
103
|
-
# end
|
104
|
-
# end
|
data/lib/zelkova/node.rb
CHANGED
@@ -11,18 +11,20 @@ class Zelkova::Node
|
|
11
11
|
attr_reader :edges
|
12
12
|
sig { returns(Zelkova::Graph) }
|
13
13
|
attr_reader :graph
|
14
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
15
|
+
attr_reader :metadata
|
14
16
|
|
15
|
-
sig { params(word: String, graph: Zelkova::Graph).void }
|
16
|
-
def initialize(word, graph)
|
17
|
+
sig { params(word: String, graph: Zelkova::Graph, metadata: T.nilable(T::Hash[T.untyped, T.untyped])).void }
|
18
|
+
def initialize(word, graph, metadata = {})
|
17
19
|
@word = T.let(word, String)
|
18
20
|
@graph = T.let(graph, Zelkova::Graph)
|
19
|
-
|
20
21
|
@edges = T.let([], T::Array[Zelkova::Edge])
|
22
|
+
@metadata = T.let(T.must(metadata), T::Hash[T.untyped, T.untyped])
|
21
23
|
end
|
22
24
|
|
23
25
|
sig { returns(String) }
|
24
26
|
def inspect
|
25
|
-
"Word: #{self.word}, Number of Edges: #{self.edges.count}"
|
27
|
+
"Word: #{self.word}, Number of Edges: #{self.edges.count}, Metadata: #{self.metadata}"
|
26
28
|
end
|
27
29
|
|
28
30
|
sig { params(node: Zelkova::Node, weight: Integer).void }
|
data/lib/zelkova/version.rb
CHANGED
data/lib/zelkova.rb
CHANGED
@@ -7,4 +7,16 @@ require_relative "zelkova/graph"
|
|
7
7
|
|
8
8
|
module Zelkova
|
9
9
|
class Error < StandardError; end
|
10
|
+
|
11
|
+
@@graph = T.let(Zelkova::Graph.new, Zelkova::Graph)
|
12
|
+
|
13
|
+
class << self
|
14
|
+
extend T::Sig
|
15
|
+
|
16
|
+
sig { returns(Zelkova::Graph) }
|
17
|
+
def graph
|
18
|
+
# TODO: make this lazy when in development mode for speed
|
19
|
+
@@graph
|
20
|
+
end
|
21
|
+
end
|
10
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zelkova
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Guess
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eikon
|