code: def _tile_pearson_align(cls, left, right, axis):
      if left.ndim == right.ndim:
          left, right = yield from recursive_tile(left.align(right))
      else:
          left, right = yield from recursive_tile(
              left.align(right, axis=axis)
          )
      if has_unknown_shape(left, right):
          yield left.chunks + right.chunks + [left, right]
  
      nna_left = left.notna().astype(np.float_)
      nna_right = right.notna().astype(np.float_)
  
      left, right = left.fillna(0), right.fillna(0)
  
      sum_left = left.mul(nna_right, axis=axis).sum(axis=axis)
      sum_right = nna_left.mul(right, axis=axis).sum(axis=axis)
      sum_left2 = (left**2).mul(nna_right, axis=axis).sum(axis=axis)
      sum_right2 = nna_left.mul(right**2, axis=axis).sum(axis=axis)
      sum_mul = left.mul(right, axis=axis).sum(axis=axis)
      data_count = nna_left.mul(nna_right, axis=axis).sum(axis=axis)
  
      divisor = np.sqrt(
          data_count * sum_left2 - sum_left * sum_left
      ) * np.sqrt(data_count * sum_right2 - sum_right * sum_right)
      return (data_count * sum_mul - sum_left * sum_right) / divisor
  
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import ENTITY_TYPE, recursive_tile
  from ...serialization.serializables import BoolField, AnyField, KeyField, Int32Field
  from ...tensor.utils import filter_inputs
  from ...utils import has_unknown_shape
  from ..core import SERIES_TYPE, DATAFRAME_TYPE
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import build_empty_df, validate_axis, parse_index
label_desc: Use image node_id 5 for calling the DataFrameCorr obj's underlying member method code with example usage: obj._tile_pearson_align(cls, left, right, axis) and returns: unknown