Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
dgl
Commits
ad15947f
Unverified
Commit
ad15947f
authored
Aug 28, 2019
by
Zihao Ye
Committed by
GitHub
Aug 28, 2019
Browse files
[bugfix] Fix several issues in `test_kernel` (#801)
* upd * stable
parent
3192beb4
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
18 deletions
+53
-18
tests/compute/test_kernel.py
tests/compute/test_kernel.py
+53
-18
No files found.
tests/compute/test_kernel.py
View file @
ad15947f
...
@@ -20,7 +20,6 @@ def udf_mean(nodes):
...
@@ -20,7 +20,6 @@ def udf_mean(nodes):
def
udf_sum
(
nodes
):
def
udf_sum
(
nodes
):
return
{
'r2'
:
nodes
.
mailbox
[
'm'
].
sum
(
1
)}
return
{
'r2'
:
nodes
.
mailbox
[
'm'
].
sum
(
1
)}
def
udf_max
(
nodes
):
def
udf_max
(
nodes
):
return
{
'r2'
:
F
.
max
(
nodes
.
mailbox
[
'm'
],
1
)}
return
{
'r2'
:
F
.
max
(
nodes
.
mailbox
[
'm'
],
1
)}
...
@@ -40,27 +39,30 @@ def generate_feature(g, broadcast='none'):
...
@@ -40,27 +39,30 @@ def generate_feature(g, broadcast='none'):
nv
=
g
.
number_of_nodes
()
nv
=
g
.
number_of_nodes
()
ne
=
g
.
number_of_edges
()
ne
=
g
.
number_of_edges
()
if
broadcast
==
'e'
:
if
broadcast
==
'e'
:
u
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
)
+
1
)
u
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
)
)
)
e
=
F
.
tensor
(
np
.
random
.
randn
(
ne
,
D2
,
1
)
-
1
)
e
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
ne
,
D2
,
1
)
)
)
v
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
))
v
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
))
)
elif
broadcast
==
'u'
:
elif
broadcast
==
'u'
:
u
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D2
,
1
)
+
1
)
u
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D2
,
1
)
)
)
e
=
F
.
tensor
(
np
.
random
.
randn
(
ne
,
D1
,
D2
,
D3
)
-
1
)
e
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
ne
,
D1
,
D2
,
D3
)
)
)
v
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
))
v
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
))
)
elif
broadcast
==
'v'
:
elif
broadcast
==
'v'
:
u
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
)
+
1
)
u
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
)
)
)
e
=
F
.
tensor
(
np
.
random
.
randn
(
ne
,
D1
,
D2
,
D3
)
-
1
)
e
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
ne
,
D1
,
D2
,
D3
)
)
)
v
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D2
,
1
))
v
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D2
,
1
))
)
else
:
else
:
u
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
)
+
1
)
u
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
)
)
)
e
=
F
.
tensor
(
np
.
random
.
randn
(
ne
,
D1
,
D2
,
D3
)
-
1
)
e
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
ne
,
D1
,
D2
,
D3
)
)
)
v
=
F
.
tensor
(
np
.
random
.
randn
(
nv
,
D1
,
D2
,
D3
))
v
=
F
.
tensor
(
np
.
random
.
uniform
(
-
1
,
1
,
(
nv
,
D1
,
D2
,
D3
))
)
return
u
,
v
,
e
return
u
,
v
,
e
def
test_copy_src_reduce
():
def
test_copy_src_reduce
():
def
_test
(
red
,
partial
):
def
_test
(
red
,
partial
):
g
=
dgl
.
DGLGraph
(
nx
.
erdos_renyi_graph
(
100
,
0.1
))
g
=
dgl
.
DGLGraph
(
nx
.
erdos_renyi_graph
(
100
,
0.1
))
# NOTE(zihao): add self-loop to avoid zero-degree nodes.
# https://github.com/dmlc/dgl/issues/761
g
.
add_edges
(
g
.
nodes
(),
g
.
nodes
())
hu
,
hv
,
he
=
generate_feature
(
g
,
'none'
)
hu
,
hv
,
he
=
generate_feature
(
g
,
'none'
)
if
partial
:
if
partial
:
nid
=
F
.
tensor
(
list
(
range
(
0
,
100
,
2
)))
nid
=
F
.
tensor
(
list
(
range
(
0
,
100
,
2
)))
...
@@ -110,6 +112,8 @@ def test_copy_src_reduce():
...
@@ -110,6 +112,8 @@ def test_copy_src_reduce():
def
test_copy_edge_reduce
():
def
test_copy_edge_reduce
():
def
_test
(
red
,
partial
):
def
_test
(
red
,
partial
):
g
=
dgl
.
DGLGraph
(
nx
.
erdos_renyi_graph
(
100
,
0.1
))
g
=
dgl
.
DGLGraph
(
nx
.
erdos_renyi_graph
(
100
,
0.1
))
# NOTE(zihao): add self-loop to avoid zero-degree nodes.
g
.
add_edges
(
g
.
nodes
(),
g
.
nodes
())
hu
,
hv
,
he
=
generate_feature
(
g
,
'none'
)
hu
,
hv
,
he
=
generate_feature
(
g
,
'none'
)
if
partial
:
if
partial
:
nid
=
F
.
tensor
(
list
(
range
(
0
,
100
,
2
)))
nid
=
F
.
tensor
(
list
(
range
(
0
,
100
,
2
)))
...
@@ -155,8 +159,30 @@ def test_copy_edge_reduce():
...
@@ -155,8 +159,30 @@ def test_copy_edge_reduce():
def
test_all_binary_builtins
():
def
test_all_binary_builtins
():
def
_test
(
g
,
lhs
,
rhs
,
binary_op
,
reducer
,
paritial
,
nid
,
broadcast
=
'none'
):
def
_test
(
g
,
lhs
,
rhs
,
binary_op
,
reducer
,
partial
,
nid
,
broadcast
=
'none'
):
# initialize node/edge features with uniform(-1, 1)
hu
,
hv
,
he
=
generate_feature
(
g
,
broadcast
)
hu
,
hv
,
he
=
generate_feature
(
g
,
broadcast
)
if
binary_op
==
'div'
:
# op = div
# lhs range: [-1, 1]
# rhs range: [1, 2]
# result range: [-1, 1]
if
rhs
==
'u'
:
hu
=
(
hu
+
3
)
/
2
elif
rhs
==
'v'
:
hv
=
(
hv
+
3
)
/
2
elif
rhs
==
'e'
:
he
=
(
he
+
3
)
/
2
if
binary_op
==
'add'
or
binary_op
==
'sub'
:
# op = add, sub
# lhs range: [-1/2, 1/2]
# rhs range: [-1/2, 1/2]
# result range: [-1, 1]
hu
=
hu
/
2
hv
=
hv
/
2
he
=
he
/
2
g
.
ndata
[
'u'
]
=
F
.
attach_grad
(
F
.
clone
(
hu
))
g
.
ndata
[
'u'
]
=
F
.
attach_grad
(
F
.
clone
(
hu
))
g
.
ndata
[
'v'
]
=
F
.
attach_grad
(
F
.
clone
(
hv
))
g
.
ndata
[
'v'
]
=
F
.
attach_grad
(
F
.
clone
(
hv
))
g
.
edata
[
'e'
]
=
F
.
attach_grad
(
F
.
clone
(
he
))
g
.
edata
[
'e'
]
=
F
.
attach_grad
(
F
.
clone
(
he
))
...
@@ -200,9 +226,15 @@ def test_all_binary_builtins():
...
@@ -200,9 +226,15 @@ def test_all_binary_builtins():
def
mfunc
(
edges
):
def
mfunc
(
edges
):
op
=
getattr
(
F
,
binary_op
)
op
=
getattr
(
F
,
binary_op
)
lhs_data
=
target_switch
(
edges
,
lhs
)
lhs_data
=
target_switch
(
edges
,
lhs
)[
lhs
]
rhs_data
=
target_switch
(
edges
,
rhs
)
rhs_data
=
target_switch
(
edges
,
rhs
)[
rhs
]
return
{
"m"
:
op
(
lhs_data
[
lhs
],
rhs_data
[
rhs
])}
# NOTE(zihao): we need to do batched broadcast
# e.g. (68, 3, 1) op (68, 5, 3, 4)
while
F
.
ndim
(
lhs_data
)
<
F
.
ndim
(
rhs_data
):
lhs_data
=
F
.
unsqueeze
(
lhs_data
,
1
)
while
F
.
ndim
(
rhs_data
)
<
F
.
ndim
(
lhs_data
):
rhs_data
=
F
.
unsqueeze
(
rhs_data
,
1
)
return
{
"m"
:
op
(
lhs_data
,
rhs_data
)}
def
rfunc
(
nodes
):
def
rfunc
(
nodes
):
op
=
getattr
(
F
,
reducer
)
op
=
getattr
(
F
,
reducer
)
...
@@ -249,6 +281,8 @@ def test_all_binary_builtins():
...
@@ -249,6 +281,8 @@ def test_all_binary_builtins():
g
=
dgl
.
DGLGraph
()
g
=
dgl
.
DGLGraph
()
g
.
add_nodes
(
20
)
g
.
add_nodes
(
20
)
# NOTE(zihao): add self-loop to avoid zero-degree nodes.
g
.
add_edges
(
g
.
nodes
(),
g
.
nodes
())
for
i
in
range
(
2
,
18
):
for
i
in
range
(
2
,
18
):
g
.
add_edge
(
0
,
i
)
g
.
add_edge
(
0
,
i
)
g
.
add_edge
(
1
,
i
)
g
.
add_edge
(
1
,
i
)
...
@@ -267,7 +301,8 @@ def test_all_binary_builtins():
...
@@ -267,7 +301,8 @@ def test_all_binary_builtins():
for
reducer
in
[
"sum"
,
"max"
,
"min"
,
"prod"
,
"mean"
]:
for
reducer
in
[
"sum"
,
"max"
,
"min"
,
"prod"
,
"mean"
]:
for
broadcast
in
[
"none"
,
lhs
,
rhs
]:
for
broadcast
in
[
"none"
,
lhs
,
rhs
]:
for
partial
in
[
False
,
True
]:
for
partial
in
[
False
,
True
]:
_test
(
g
,
lhs
,
rhs
,
binary_op
,
reducer
,
partial
,
nid
)
_test
(
g
,
lhs
,
rhs
,
binary_op
,
reducer
,
partial
,
nid
,
broadcast
=
broadcast
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
test_copy_src_reduce
()
test_copy_src_reduce
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment