def band_velocity(p1, p2): # Note :This function is only meant to be called once to initialize the vel vectors p_x, p_y = get_p_x_and_p_y(p1, p2) p = af.sqrt(p_x**2. + p_y**2.) p_hat = [p_x / (p + 1e-20), p_y / (p + 1e-20)] if (fermi_surface_shape == 'circle'): v_f_hat = p_hat elif (fermi_surface_shape == 'hexagon'): # Need to get theta for normal_to_hexagon_unit_vec() if (p_space_grid == 'cartesian'): p_x_local = p1 p_y_local = p2 theta = af.atan(p_y_local / p_x_local) elif (p_space_grid == 'polar2D'): # In polar2D coordinates, p1 = radius and p2 = theta r = p1 theta = p2 else: raise NotImplementedError( 'Unsupported coordinate system in p_space') v_f_hat = normal_to_hexagon_unit_vec(theta) # Quadratic dispersion m = effective_mass(p1, p2) v_f = p / m if (dispersion == 'linear' or zero_temperature): v_f = fermi_velocity upper_band_velocity = [v_f * v_f_hat[0], v_f * v_f_hat[1]] return (upper_band_velocity)
def get_theta(q1, q2, boundary, q1_start_local_left=None, q2_start_local_bottom=None): dq1 = domain.dq1 dq2 = domain.dq2 q1_tmp = q1.copy() q2_tmp = q2.copy() # Assuming q1, q2 are at zone centers. Need to calculate thetas using the face-centers on which the boundary lies if (boundary == "left"): q1_tmp = q1_tmp - 0.5 * dq1 dq1 = 0 if (boundary == "right"): q1_tmp = q1_tmp + 0.5 * dq1 dq1 = 0 if (boundary == "top"): q2_tmp = q2_tmp + 0.5 * dq2 dq2 = 0 if (boundary == "bottom"): q2_tmp = q2_tmp - 0.5 * dq2 dq2 = 0 [[dx_dq1, dx_dq2], [dy_dq1, dy_dq2]] = jacobian_dx_dq(q1_tmp, q2_tmp, q1_start_local_left, q2_start_local_bottom) dy = dy_dq1 * dq1 + dy_dq2 * dq2 dx = dx_dq1 * dq1 + dx_dq2 * dq2 dy_dx = dy / dx return (af.atan(dy_dx))
def initialize_f(q1, q2, p1, p2, p3, params): PETSc.Sys.Print("Initializing f") k = params.boltzmann_constant params.mu = 0. * q1 + params.initial_mu params.T = 0. * q1 + params.initial_temperature params.vel_drift_x = 0. * params.vel_drift_x_in + 0. * q1 params.vel_drift_y = 0. * q1 print(params.vel_drift_x) params.mu_ee = params.mu.copy() params.T_ee = params.T.copy() params.p_x, params.p_y = params.get_p_x_and_p_y(p1, p2) params.E_band = params.band_energy(p1, p2) params.vel_band = params.band_velocity(p1, p2) # Evaluating velocity space resolution for each species: dp1 = [] dp2 = [] dp3 = [] N_p1 = domain.N_p1 N_p2 = domain.N_p2 N_p3 = domain.N_p3 p1_start = domain.p1_start p1_end = domain.p1_end p2_start = domain.p2_start p2_end = domain.p2_end p3_start = domain.p3_start p3_end = domain.p3_end N_species = len(params.mass) for i in range(N_species): dp1.append((p1_end[i] - p1_start[i]) / N_p1) dp2.append((p2_end[i] - p2_start[i]) / N_p2) dp3.append((p3_end[i] - p3_start[i]) / N_p3) theta = af.atan(params.p_y / params.p_x) p_f = params.fermi_momentum_magnitude(theta) if (params.p_space_grid == 'cartesian'): dp_x = dp1[0] dp_y = dp2[0] dp_z = dp3[0] params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * dp_z * dp_y * dp_x elif (params.p_space_grid == 'polar2D'): # In polar2D coordinates, p1 = radius and p2 = theta # Integral : \int delta(r - r_F) F(r, theta) r dr dtheta r = p1 theta = p2 dp_r = dp1[0] dp_theta = dp2[0] if (params.zero_temperature): # Assumption : F(r, theta) = delta(r-r_F)*F(theta) params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * p_f * dp_theta else: params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * r * dp_r * dp_theta else: raise NotImplementedError('Unsupported coordinate system in p_space') f = (1. / (af.exp( (params.E_band - params.vel_drift_x * params.p_x - params.vel_drift_y * params.p_y - params.mu) / (k * params.T)) + 1.)) af.eval(f) return (f)
def initialize_f(q1, q2, p1, p2, p3, params): PETSc.Sys.Print("Initializing f") k = params.boltzmann_constant params.mu = 0. * q1 + params.initial_mu params.T = 0. * q1 + params.initial_temperature params.vel_drift_x = 0. * q1 params.vel_drift_y = 0. * q1 params.mu_ee = params.mu.copy() params.T_ee = params.T.copy() params.vel_drift_x = 0. * q1 + 0e-3 params.vel_drift_y = 0. * q1 + 0e-3 params.j_x = 0. * q1 params.j_y = 0. * q1 params.p_x, params.p_y = params.get_p_x_and_p_y(p1, p2) params.E_band = params.band_energy(p1, p2) params.vel_band = params.band_velocity(p1, p2) # TODO: Injecting get_cartesian_coords into params to avoid circular dependency params.get_cartesian_coords = coords.get_cartesian_coords # Load shift indices for all 4 boundaries into params. Required to perform # mirroring operations along boundaries at arbitrary angles. params.shift_indices_left, params.shift_indices_right, \ params.shift_indices_bottom, params.shift_indices_top = \ compute_shift_indices(q1, q2, p1, p2, p3, params) params.x, params.y = coords.get_cartesian_coords( q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) # TODO : Testing : Dump left, bottom, right, top faces also d_q1 = (q1[0, 0, 1, 0] - q1[0, 0, 0, 0]).scalar() d_q2 = (q2[0, 0, 0, 1] - q2[0, 0, 0, 0]).scalar() q1_left_faces = q1 - 0.5 * d_q1 q2_bottom_faces = q2 - 0.5 * d_q2 q1_right_faces = q1 + 0.5 * d_q1 q2_top_faces = q2 + 0.5 * d_q2 params.x_top_center, params.y_top_center = coords.get_cartesian_coords( q1, q2_top_faces, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.x_right_center, params.y_right_center = coords.get_cartesian_coords( q1_right_faces, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.x_bottom_center, params.y_bottom_center = coords.get_cartesian_coords( q1, q2_bottom_faces, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.x_left_center, params.y_left_center = coords.get_cartesian_coords( q1_left_faces, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.q1 = q1 params.q2 = q2 [[params.dx_dq1, params.dx_dq2], [params.dy_dq1, params.dy_dq2] ] = jacobian_dx_dq(q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) [[params.dq1_dx, params.dq1_dy], [params.dq2_dx, params.dq2_dy] ] = jacobian_dq_dx(q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.sqrt_det_g = sqrt_det_g( q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) # Calculation of integral measure # Evaluating velocity space resolution for each species: dp1 = [] dp2 = [] dp3 = [] N_p1 = domain.N_p1 N_p2 = domain.N_p2 N_p3 = domain.N_p3 p1_start = domain.p1_start p1_end = domain.p1_end p2_start = domain.p2_start p2_end = domain.p2_end p3_start = domain.p3_start p3_end = domain.p3_end N_species = len(params.mass) for i in range(N_species): dp1.append((p1_end[i] - p1_start[i]) / N_p1) dp2.append((p2_end[i] - p2_start[i]) / N_p2) dp3.append((p3_end[i] - p3_start[i]) / N_p3) theta = af.atan(params.p_y / params.p_x) p_f = params.fermi_momentum_magnitude(theta) if (params.p_space_grid == 'cartesian'): dp_x = dp1[0] dp_y = dp2[0] dp_z = dp3[0] params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * dp_z * dp_y * dp_x elif (params.p_space_grid == 'polar2D'): # In polar2D coordinates, p1 = radius and p2 = theta # Integral : \int delta(r - r_F) F(r, theta) r dr dtheta r = p1 theta = p2 dp_r = dp1[0] dp_theta = dp2[0] if (params.zero_temperature): # Assumption : F(r, theta) = delta(r-r_F)*F(theta) params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * p_f * dp_theta else: params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * r * dp_r * dp_theta else: raise NotImplementedError('Unsupported coordinate system in p_space') # # Initialize to zero # f = 0*q1*p1 f = (1. / (af.exp( (params.E_band - params.vel_drift_x * params.p_x - params.vel_drift_y * params.p_y - params.mu) / (k * params.T)) + 1.)) if (params.zero_temperature): f = f - 0.5 af.eval(f) return (f)
def simple_arith(verbose = False): display_func = _util.display_func(verbose) print_func = _util.print_func(verbose) a = af.randu(3,3,dtype=af.Dtype.u32) b = af.constant(4, 3, 3, dtype=af.Dtype.u32) display_func(a) display_func(b) c = a + b d = a d += b display_func(c) display_func(d) display_func(a + 2) display_func(3 + a) c = a - b d = a d -= b display_func(c) display_func(d) display_func(a - 2) display_func(3 - a) c = a * b d = a d *= b display_func(c * 2) display_func(3 * d) display_func(a * 2) display_func(3 * a) c = a / b d = a d /= b display_func(c / 2.0) display_func(3.0 / d) display_func(a / 2) display_func(3 / a) c = a % b d = a d %= b display_func(c % 2.0) display_func(3.0 % d) display_func(a % 2) display_func(3 % a) c = a ** b d = a d **= b display_func(c ** 2.0) display_func(3.0 ** d) display_func(a ** 2) display_func(3 ** a) display_func(a < b) display_func(a < 0.5) display_func(0.5 < a) display_func(a <= b) display_func(a <= 0.5) display_func(0.5 <= a) display_func(a > b) display_func(a > 0.5) display_func(0.5 > a) display_func(a >= b) display_func(a >= 0.5) display_func(0.5 >= a) display_func(a != b) display_func(a != 0.5) display_func(0.5 != a) display_func(a == b) display_func(a == 0.5) display_func(0.5 == a) display_func(a & b) display_func(a & 2) c = a c &= 2 display_func(c) display_func(a | b) display_func(a | 2) c = a c |= 2 display_func(c) display_func(a >> b) display_func(a >> 2) c = a c >>= 2 display_func(c) display_func(a << b) display_func(a << 2) c = a c <<= 2 display_func(c) display_func(-a) display_func(+a) display_func(~a) display_func(a) display_func(af.cast(a, af.Dtype.c32)) display_func(af.maxof(a,b)) display_func(af.minof(a,b)) display_func(af.rem(a,b)) a = af.randu(3,3) - 0.5 b = af.randu(3,3) - 0.5 display_func(af.abs(a)) display_func(af.arg(a)) display_func(af.sign(a)) display_func(af.round(a)) display_func(af.trunc(a)) display_func(af.floor(a)) display_func(af.ceil(a)) display_func(af.hypot(a, b)) display_func(af.sin(a)) display_func(af.cos(a)) display_func(af.tan(a)) display_func(af.asin(a)) display_func(af.acos(a)) display_func(af.atan(a)) display_func(af.atan2(a, b)) c = af.cplx(a) d = af.cplx(a,b) display_func(c) display_func(d) display_func(af.real(d)) display_func(af.imag(d)) display_func(af.conjg(d)) display_func(af.sinh(a)) display_func(af.cosh(a)) display_func(af.tanh(a)) display_func(af.asinh(a)) display_func(af.acosh(a)) display_func(af.atanh(a)) a = af.abs(a) b = af.abs(b) display_func(af.root(a, b)) display_func(af.pow(a, b)) display_func(af.pow2(a)) display_func(af.exp(a)) display_func(af.expm1(a)) display_func(af.erf(a)) display_func(af.erfc(a)) display_func(af.log(a)) display_func(af.log1p(a)) display_func(af.log10(a)) display_func(af.log2(a)) display_func(af.sqrt(a)) display_func(af.cbrt(a)) a = af.round(5 * af.randu(3,3) - 1) b = af.round(5 * af.randu(3,3) - 1) display_func(af.factorial(a)) display_func(af.tgamma(a)) display_func(af.lgamma(a)) display_func(af.iszero(a)) display_func(af.isinf(a/b)) display_func(af.isnan(a/a)) a = af.randu(5, 1) b = af.randu(1, 5) c = af.broadcast(lambda x,y: x+y, a, b) display_func(a) display_func(b) display_func(c) @af.broadcast def test_add(aa, bb): return aa + bb display_func(test_add(a, b))
def initialize_f(q1, q2, p1, p2, p3, params): PETSc.Sys.Print("Initializing f") k = params.boltzmann_constant params.mu = 0. * q1 + params.initial_mu params.T = 0. * q1 + params.initial_temperature params.vel_drift_x = 0. * q1 params.vel_drift_y = 0. * q1 params.mu_ee = params.mu.copy() params.T_ee = params.T.copy() params.vel_drift_x = 0. * q1 + 0e-3 params.vel_drift_y = 0. * q1 + 0e-3 params.j_x = 0. * q1 params.j_y = 0. * q1 params.p_x, params.p_y = params.get_p_x_and_p_y(p1, p2) params.E_band = params.band_energy(p1, p2) params.vel_band = params.band_velocity(p1, p2) # TODO: Injecting get_cartesian_coords into params to avoid circular dependency params.get_cartesian_coords = coords.get_cartesian_coords # Load shift indices for all 4 boundaries into params. Required to perform # mirroring operations along boundaries at arbitrary angles. params.shift_indices_left, params.shift_indices_right, \ params.shift_indices_bottom, params.shift_indices_top = \ compute_shift_indices(q1, q2, p1, p2, p3, params) params.x, params.y = coords.get_cartesian_coords( q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) # TODO : Testing : Dump left, bottom, right, top faces also d_q1 = (q1[0, 0, 1, 0] - q1[0, 0, 0, 0]).scalar() d_q2 = (q2[0, 0, 0, 1] - q2[0, 0, 0, 0]).scalar() q1_left_faces = q1 - 0.5 * d_q1 q2_bottom_faces = q2 - 0.5 * d_q2 q1_right_faces = q1 + 0.5 * d_q1 q2_top_faces = q2 + 0.5 * d_q2 params.x_top_center, params.y_top_center = coords.get_cartesian_coords( q1, q2_top_faces, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.x_right_center, params.y_right_center = coords.get_cartesian_coords( q1_right_faces, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.q1 = q1 params.q2 = q2 [[params.dx_dq1, params.dx_dq2], [params.dy_dq1, params.dy_dq2] ] = jacobian_dx_dq(q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) [[params.dq1_dx, params.dq1_dy], [params.dq2_dx, params.dq2_dy] ] = jacobian_dq_dx(q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) params.sqrt_det_g = sqrt_det_g( q1, q2, q1_start_local_left=params.q1_start_local_left, q2_start_local_bottom=params.q2_start_local_bottom) # Calculation of integral measure # Evaluating velocity space resolution for each species: dp1 = [] dp2 = [] dp3 = [] N_p1 = domain.N_p1 N_p2 = domain.N_p2 N_p3 = domain.N_p3 p1_start = domain.p1_start p1_end = domain.p1_end p2_start = domain.p2_start p2_end = domain.p2_end p3_start = domain.p3_start p3_end = domain.p3_end N_species = len(params.mass) for i in range(N_species): dp1.append((p1_end[i] - p1_start[i]) / N_p1) dp2.append((p2_end[i] - p2_start[i]) / N_p2) dp3.append((p3_end[i] - p3_start[i]) / N_p3) theta = af.atan(params.p_y / params.p_x) p_f = params.fermi_momentum_magnitude(theta) if (params.p_space_grid == 'cartesian'): dp_x = dp1[0] dp_y = dp2[0] dp_z = dp3[0] params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * dp_z * dp_y * dp_x elif (params.p_space_grid == 'polar2D'): # In polar2D coordinates, p1 = radius and p2 = theta # Integral : \int delta(r - r_F) F(r, theta) r dr dtheta r = p1 theta = p2 dp_r = dp1[0] dp_theta = dp2[0] if (params.zero_temperature): # Assumption : F(r, theta) = delta(r-r_F)*F(theta) params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * p_f * dp_theta else: params.integral_measure = \ (4./(2.*np.pi*params.h_bar)**2) * r * dp_r * dp_theta else: raise NotImplementedError('Unsupported coordinate system in p_space') # Initialize to zero f = 0 * q1 * p1 # Parameters to define a gaussian in space (representing a 2D ball) A = domain.N_p2 # Amplitude (required for normalization) sigma_x = 0.05 # Standard deviation in x sigma_y = 0.05 # Standard deviation in y x_0 = -0.7 # Center in x y_0 = 0. # Center in y # TODO: This will work with polar2D p-space only for the moment # Particles lying on the ball need to have the same velocity (direction) #theta_0_index = (5*N_p2/8) - 1 # Direction of initial velocity theta_0_index = int(4 * domain.N_p2 / 8) # Direction of initial velocity print("Initial angle : ") af.display(p2[theta_0_index]) # f[theta_0_index, :, :] = A*af.exp(-( (params.x-x_0)**2/(2*sigma_x**2) + \ # (params.y-y_0)**2/(2*sigma_y**2) # ) # ) + A*af.exp(-( (params.x-x_0)**2/(2*sigma_x**2) + \ # (params.y-(-0.5))**2/(2*sigma_y**2) # ) # ) + A*af.exp(-( (params.x-x_0)**2/(2*sigma_x**2) + \ # (params.y-0.5)**2/(2*sigma_y**2) # ) # ) f[theta_0_index, :, :] = A * af.exp(-((params.x - x_0)**2 / (2 * sigma_x**2))) af.eval(f) return (f)
def j_y(f, p1, p2, p3, integral_measure): theta = af.atan(params.p_y / params.p_x) p_f = params.fermi_momentum_magnitude(theta) return (integral_over_p(f * params.fermi_velocity * params.p_y / p_f, integral_measure))
def density(f, p1, p2, p3, integral_measure): theta = af.atan(params.p_y / params.p_x) p_f = params.fermi_momentum_magnitude(theta) return (integral_over_p(f + p_f / 2, integral_measure))
def simple_arith(verbose=False): display_func = _util.display_func(verbose) print_func = _util.print_func(verbose) a = af.randu(3, 3) b = af.constant(4, 3, 3) display_func(a) display_func(b) c = a + b d = a d += b display_func(c) display_func(d) display_func(a + 2) display_func(3 + a) c = a - b d = a d -= b display_func(c) display_func(d) display_func(a - 2) display_func(3 - a) c = a * b d = a d *= b display_func(c * 2) display_func(3 * d) display_func(a * 2) display_func(3 * a) c = a / b d = a d /= b display_func(c / 2.0) display_func(3.0 / d) display_func(a / 2) display_func(3 / a) c = a % b d = a d %= b display_func(c % 2.0) display_func(3.0 % d) display_func(a % 2) display_func(3 % a) c = a**b d = a d **= b display_func(c**2.0) display_func(3.0**d) display_func(a**2) display_func(3**a) display_func(a < b) display_func(a < 0.5) display_func(0.5 < a) display_func(a <= b) display_func(a <= 0.5) display_func(0.5 <= a) display_func(a > b) display_func(a > 0.5) display_func(0.5 > a) display_func(a >= b) display_func(a >= 0.5) display_func(0.5 >= a) display_func(a != b) display_func(a != 0.5) display_func(0.5 != a) display_func(a == b) display_func(a == 0.5) display_func(0.5 == a) a = af.randu(3, 3, dtype=af.Dtype.u32) b = af.constant(4, 3, 3, dtype=af.Dtype.u32) display_func(a & b) display_func(a & 2) c = a c &= 2 display_func(c) display_func(a | b) display_func(a | 2) c = a c |= 2 display_func(c) display_func(a >> b) display_func(a >> 2) c = a c >>= 2 display_func(c) display_func(a << b) display_func(a << 2) c = a c <<= 2 display_func(c) display_func(-a) display_func(+a) display_func(~a) display_func(a) display_func(af.cast(a, af.Dtype.c32)) display_func(af.maxof(a, b)) display_func(af.minof(a, b)) display_func(af.rem(a, b)) a = af.randu(3, 3) - 0.5 b = af.randu(3, 3) - 0.5 display_func(af.abs(a)) display_func(af.arg(a)) display_func(af.sign(a)) display_func(af.round(a)) display_func(af.trunc(a)) display_func(af.floor(a)) display_func(af.ceil(a)) display_func(af.hypot(a, b)) display_func(af.sin(a)) display_func(af.cos(a)) display_func(af.tan(a)) display_func(af.asin(a)) display_func(af.acos(a)) display_func(af.atan(a)) display_func(af.atan2(a, b)) c = af.cplx(a) d = af.cplx(a, b) display_func(c) display_func(d) display_func(af.real(d)) display_func(af.imag(d)) display_func(af.conjg(d)) display_func(af.sinh(a)) display_func(af.cosh(a)) display_func(af.tanh(a)) display_func(af.asinh(a)) display_func(af.acosh(a)) display_func(af.atanh(a)) a = af.abs(a) b = af.abs(b) display_func(af.root(a, b)) display_func(af.pow(a, b)) display_func(af.pow2(a)) display_func(af.sigmoid(a)) display_func(af.exp(a)) display_func(af.expm1(a)) display_func(af.erf(a)) display_func(af.erfc(a)) display_func(af.log(a)) display_func(af.log1p(a)) display_func(af.log10(a)) display_func(af.log2(a)) display_func(af.sqrt(a)) display_func(af.cbrt(a)) a = af.round(5 * af.randu(3, 3) - 1) b = af.round(5 * af.randu(3, 3) - 1) display_func(af.factorial(a)) display_func(af.tgamma(a)) display_func(af.lgamma(a)) display_func(af.iszero(a)) display_func(af.isinf(a / b)) display_func(af.isnan(a / a)) a = af.randu(5, 1) b = af.randu(1, 5) c = af.broadcast(lambda x, y: x + y, a, b) display_func(a) display_func(b) display_func(c) @af.broadcast def test_add(aa, bb): return aa + bb display_func(test_add(a, b))
def arctan(x): if isinstance(x, afnumpy.ndarray): s = arrayfire.atan(x.d_array) return afnumpy.ndarray(x.shape, dtype=pu.typemap(s.dtype()), af_array=s) else: return numpy.arctan(x)
b = af.randu(3, 3) - 0.5 af.display(af.abs(a)) af.display(af.arg(a)) af.display(af.sign(a)) af.display(af.round(a)) af.display(af.trunc(a)) af.display(af.floor(a)) af.display(af.ceil(a)) af.display(af.hypot(a, b)) af.display(af.sin(a)) af.display(af.cos(a)) af.display(af.tan(a)) af.display(af.asin(a)) af.display(af.acos(a)) af.display(af.atan(a)) af.display(af.atan2(a, b)) c = af.cplx(a) d = af.cplx(a, b) af.display(c) af.display(d) af.display(af.real(d)) af.display(af.imag(d)) af.display(af.conjg(d)) af.display(af.sinh(a)) af.display(af.cosh(a)) af.display(af.tanh(a)) af.display(af.asinh(a)) af.display(af.acosh(a))
b = af.randu(3,3) - 0.5 af.display(af.abs(a)) af.display(af.arg(a)) af.display(af.sign(a)) af.display(af.round(a)) af.display(af.trunc(a)) af.display(af.floor(a)) af.display(af.ceil(a)) af.display(af.hypot(a, b)) af.display(af.sin(a)) af.display(af.cos(a)) af.display(af.tan(a)) af.display(af.asin(a)) af.display(af.acos(a)) af.display(af.atan(a)) af.display(af.atan2(a, b)) c = af.cplx(a) d = af.cplx(a,b) af.display(c) af.display(d) af.display(af.real(d)) af.display(af.imag(d)) af.display(af.conjg(d)) af.display(af.sinh(a)) af.display(af.cosh(a)) af.display(af.tanh(a)) af.display(af.asinh(a)) af.display(af.acosh(a))