Commit fe60eac1 authored by Milosz Grabski's avatar Milosz Grabski
Browse files

unittest/cleanup

Added layers unit tests, removed some white spaces to remove number of flake8 errors in layers.py
parent 93b40052
Loading
Loading
Loading
Loading
+28 −28
Original line number Diff line number Diff line
@@ -374,7 +374,7 @@ class GraphConvolutionLayer(tf.keras.layers.Layer):
  """
  Graph convolution layer used in MolGAN model.
  MolGAN is a WGAN type model for generation of small molecules.
  Not used directly but used by higher level layers like MultiGraphConvolutionLayer. 
  Not used directly, higher level layers like MultiGraphConvolutionLayer.

  References
  ----------
@@ -384,7 +384,7 @@ class GraphConvolutionLayer(tf.keras.layers.Layer):

  def __init__(self,
               units,
               activation=None,
               activation="tanh",
               dropout_rate=0.0,
               edges=5,
               name="",
@@ -396,8 +396,8 @@ class GraphConvolutionLayer(tf.keras.layers.Layer):
    ---------
    units: int
      Dimesion of dense layers used for convolution
    activation: function, optional (default=None)
      Tanh is default option provided by GraphEncoderLayer
    activation: function, optional (default=Tanh)
      activation function used across model, default is Tanh
    dropout_rate: float, optional (default=0.0)
     Dropout rate used by dropout layer
    edges: int, optional (default=5)
@@ -416,7 +416,7 @@ class GraphConvolutionLayer(tf.keras.layers.Layer):
    self.dense1 = [Dense(units=self.units) for _ in range(edges - 1)]
    self.dense2 = Dense(units=self.units)
    self.dropout = Dropout(self.dropout_rate)
    self.activation = Activation(self.activation)
    self.activation_layer = Activation(self.activation)

  def call(self, inputs, training=False):
    """
@@ -451,7 +451,7 @@ class GraphConvolutionLayer(tf.keras.layers.Layer):

    output = tf.matmul(adj, output)
    output = tf.reduce_sum(output, 1) + self.dense2(node_tensor)
    output = self.activation(output)
    output = self.activation_layer(output)
    output = self.dropout(output)
    return adjacency_tensor, node_tensor, output

@@ -481,7 +481,7 @@ class GraphAggregationLayer(tf.keras.layers.Layer):

  def __init__(self,
               units,
               activation=None,
               activation="tanh",
               dropout_rate=0.0,
               name="",
               **kwargs):
@@ -492,8 +492,8 @@ class GraphAggregationLayer(tf.keras.layers.Layer):
    ---------
    units: int
      Dimesion of dense layers used for aggregation
    activation: function, optional (default=None)
      Tanh is default option provided by GraphEncoderLayer
    activation: function, optional (default=Tanh)
      activation function used across model, default is Tanh
    dropout_rate: float, optional (default=0.0)
      Used by dropout layer
    name: string, optional (default="")
@@ -558,7 +558,7 @@ class MultiGraphConvolutionLayer(tf.keras.layers.Layer):

  def __init__(self,
               units,
               activation=None,
               activation="tanh",
               dropout_rate=0.0,
               edges=5,
               name="",
@@ -571,8 +571,8 @@ class MultiGraphConvolutionLayer(tf.keras.layers.Layer):
    units: list, min_length=2
      List of dimensions used by consecutive convolution layers.
      The more values the more convolution layers invoked.
    activation: function, optional (default=None)
      Tanh is default option provided by GraphEncoderLayer
    activation: function, optional (default=tanh)
      activation function used across model, default is Tanh
    dropout_rate: float, optional (default=0.0)
      Used by dropout layer
    edges: int, optional (default=0)
+96 −0
Original line number Diff line number Diff line
import unittest

from tensorflow import keras
from tensorflow.keras.layers import Input
from deepchem.models.layers import GraphConvolutionLayer, MultiGraphConvolutionLayer, GraphAggregationLayer, GraphEncoderLayer


class test_molgan_layers(unittest.TestCase):
  """
  Unit testing for MolGAN basic layers
  """

  def test_graph_convolution_layer(self):
    vertices = 9
    nodes = 5
    edges = 5
    units = 128

    layer = GraphConvolutionLayer(units=units, edges=edges)
    adjacency_tensor = Input(shape=(vertices, vertices, edges))
    node_tensor = Input(shape=(vertices, nodes))
    output = layer([adjacency_tensor, node_tensor])
    model = keras.Model(
        inputs=[adjacency_tensor, node_tensor], outputs=[output])

    assert model.output_shape == [((None, vertices, vertices, edges),
                                   (None, vertices, nodes), (None, vertices,
                                                             units))]
    assert layer.units == units
    assert layer.activation == 'tanh'
    assert layer.edges == 5
    assert layer.dropout_rate == 0.0

  def test_aggregation_layer(self):
    vertices = 9
    units = 128

    layer = GraphAggregationLayer(units=units)
    hidden_tensor = Input(shape=(vertices, units))
    output = layer(hidden_tensor)
    model = keras.Model(inputs=[hidden_tensor], outputs=[output])

    assert model.output_shape == (None, units)
    assert layer.units == units
    assert layer.activation == 'tanh'
    assert layer.dropout_rate == 0.0

  def test_multigraph_convolution_layer(self):
    vertices = 9
    nodes = 5
    edges = 5
    first_convolution_unit = 128
    second_convolution_unit = 64
    units = [first_convolution_unit, second_convolution_unit]

    layer = MultiGraphConvolutionLayer(units=units, edges=edges)
    adjacency_tensor = Input(shape=(vertices, vertices, edges))
    node_tensor = Input(shape=(vertices, nodes))
    hidden_tensor = layer([adjacency_tensor, node_tensor])
    model = keras.Model(
        inputs=[adjacency_tensor, node_tensor], outputs=[hidden_tensor])

    assert model.output_shape == (None, vertices, second_convolution_unit)
    assert layer.units == units
    assert layer.activation == 'tanh'
    assert layer.edges == 5
    assert layer.dropout_rate == 0.0

  def test_graph_encoder_later(self):
    vertices = 9
    nodes = 5
    edges = 5
    first_convolution_unit = 128
    second_convolution_unit = 64
    aggregation_unit = 128
    units = [(first_convolution_unit, second_convolution_unit),
             aggregation_unit]

    layer = GraphEncoderLayer(units=units, edges=edges)
    adjacency_tensor = Input(shape=(vertices, vertices, edges))
    node_tensor = Input(shape=(vertices, nodes))
    output = layer([adjacency_tensor, node_tensor])
    model = keras.Model(
        inputs=[adjacency_tensor, node_tensor], outputs=[output])

    assert model.output_shape == (None, aggregation_unit)
    assert layer.graph_convolution_units == (first_convolution_unit,
                                             second_convolution_unit)
    assert layer.auxiliary_units == aggregation_unit
    assert layer.activation == 'tanh'
    assert layer.edges == 5
    assert layer.dropout_rate == 0.0


if __name__ == '__main__':
  unittest.main()