use crate::{EM, ElectroweakParams, PhysicsError};
use deep_causality_num::RealField;
use deep_causality_tensor::CausalTensor;
use deep_causality_topology::{GaugeField, SimplicialManifold, U1};
pub trait ElectroweakOps<S>
where
S: RealField + Clone + From<f64> + Into<f64>,
{
fn new_field(
base: SimplicialManifold<S, S>,
connection: CausalTensor<S>,
) -> Result<Self, PhysicsError>
where
Self: Sized;
fn standard_model_params() -> ElectroweakParams<S>;
fn extract_photon(&self) -> Result<EM<S>, PhysicsError>;
fn extract_z(&self) -> Result<GaugeField<U1, S, S>, PhysicsError>;
fn sin2_theta_w(&self) -> S;
fn w_mass(&self) -> S;
fn z_mass(&self) -> S;
}