code: def test_binary_cross_entropy_loss(self, probs, labels):
      probs = jnp.asarray(probs)
      labels = jnp.asarray(labels)
  
      logits = jnp.log(probs / (1 - probs))
      mask = ~jnp.isnan(labels)
  
      loss_array = train.binary_cross_entropy_with_mask(
          logits=logits, labels=labels, mask=mask
      )
      loss = average_with_mask(loss_array, mask)
      expected_loss_array = -(jnp.log(probs) * labels) - (
          jnp.log(1 - probs) * (1 - labels)
      )
      expected_loss = average_with_mask(expected_loss_array, mask)
  
      self.assertAlmostEqual(loss, expected_loss, places=5)
  
imports: import functools
  import pathlib
  import tempfile
  from typing import Dict, Optional
  import warnings
  from absl.testing import absltest
  from absl.testing import parameterized
  import flax
  from flax.training import train_state
  import jax
  from jax import numpy
  import jraph
  import tensorflow
  import tensorflow_datasets
  import numpy
  from configs import default
  from configs import test
  import input_pipeline
  import train
label_desc: Use image node_id 2 for calling the OgbgMolpcbaTrainTest obj's underlying member method code with example usage: obj.test_binary_cross_entropy_loss(probs, labels) without return types