code: def test_mean_and_std(self):
      model = data_set.get_default_access_anomaly_model()
  
      assert (
          model.user_mapping_df.select(
              AccessAnomalyConfig.default_tenant_col,
              AccessAnomalyConfig.default_user_col,
          )
          .distinct()
          .count()
          == data_set.num_users
      )
  
      assert (
          model.res_mapping_df.select(
              AccessAnomalyConfig.default_tenant_col,
              AccessAnomalyConfig.default_res_col,
          )
          .distinct()
          .count()
          == data_set.num_resources
      )
  
      res_df = materialized_cache(model.transform(data_set.training))
      assert res_df is not None
      assert data_set.training.count() == res_df.count()
      assert (
          res_df.filter(
              f.col(AccessAnomalyConfig.default_output_col).isNull(),
          ).count()
          == 0
      )
  
      stats_map = create_stats(
          res_df, AccessAnomalyConfig.default_tenant_col
      )
  
      for stats in stats_map.get_stats():
          assert stats.min < -epsilon, stats
          assert stats.max > epsilon, stats
          assert abs(stats.mean) < epsilon, stats
          assert abs(stats.std - 1.0) < epsilon, stats
  
imports: import os
  import tempfile
  import unittest
  from typing import Dict, Optional, Set, Type, Union
  from pandas.testing import assert_frame_equal
  from pyspark.sql import DataFrame, types, functions
  from synapse.ml.cyber.feature import indexers
  from synapse.ml.cyber import DataFactory
  from synapse.ml.cyber.anomaly.collaborative_filtering import AccessAnomaly, AccessAnomalyModel, AccessAnomalyConfig, ConnectedComponents, ModelNormalizeTransformer, _UserResourceFeatureVectorMapping
  from synapsemltest.cyber.explain_tester import ExplainTester
  from synapsemltest.spark import *
label_desc: Use image node_id 3 for calling the TestAccessAnomaly obj's underlying member method code with example usage: obj.test_mean_and_std() without return types