simple_si_units/
chemical.rs

1
2//! This module provides chemical SI units, such as catalytic activity 
3//! and molar mass.
4use core::fmt;
5use super::UnitStruct;
6use super::NumLike;
7use super::base::*;
8use super::geometry::*;
9use super::mechanical::*;
10use super::nuclear::*;
11
12// optional supports
13#[cfg(feature="serde")]
14use serde::{Serialize, Deserialize};
15#[cfg(feature="num-bigfloat")]
16use num_bigfloat;
17#[cfg(feature="num-complex")]
18use num_complex;
19
20
21
22/// The catalytic activity unit type, defined as moles per second in SI units
23#[derive(UnitStruct, Debug, Clone)]
24#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
25pub struct CatalyticActivity<T: NumLike>{
26	/// The value of this Catalytic activity in moles per second
27	pub molps: T
28}
29
30impl<T> CatalyticActivity<T> where T: NumLike {
31
32	/// Returns the standard unit name of catalytic activity: "moles per second"
33	pub fn unit_name() -> &'static str { "moles per second" }
34	
35	/// Returns the abbreviated name or symbol of catalytic activity: "mol/s" for moles per second
36	pub fn unit_symbol() -> &'static str { "mol/s" }
37	
38	/// Returns a new catalytic activity value from the given number of moles per second
39	///
40	/// # Arguments
41	/// * `molps` - Any number-like type, representing a quantity of moles per second
42	pub fn from_molps(molps: T) -> Self { CatalyticActivity{molps: molps} }
43	
44	/// Returns a copy of this catalytic activity value in moles per second
45	pub fn to_molps(&self) -> T { self.molps.clone() }
46
47	/// Returns a new catalytic activity value from the given number of moles per second
48	///
49	/// # Arguments
50	/// * `moles_per_second` - Any number-like type, representing a quantity of moles per second
51	pub fn from_moles_per_second(moles_per_second: T) -> Self { CatalyticActivity{molps: moles_per_second} }
52	
53	/// Returns a copy of this catalytic activity value in moles per second
54	pub fn to_moles_per_second(&self) -> T { self.molps.clone() }
55
56}
57
58impl<T> fmt::Display for CatalyticActivity<T> where T: NumLike {
59	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60		write!(f, "{} {}", &self.molps, Self::unit_symbol())
61	}
62}
63
64impl<T> CatalyticActivity<T> where T: NumLike+From<f64> {
65	
66	/// Returns a copy of this catalytic activity value in count per second
67	/// 
68	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
69	pub fn to_Nps(&self) -> T {
70		return self.molps.clone() * T::from(6.02214076e+23_f64);
71	}
72
73	/// Returns a new catalytic activity value from the given number of count per second
74	/// 
75	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
76	///
77	/// # Arguments
78	/// * `Nps` - Any number-like type, representing a quantity of count per second
79	pub fn from_Nps(Nps: T) -> Self {
80		CatalyticActivity{molps: Nps * T::from(1.66053906717385e-24_f64)}
81	}
82
83	/// Returns a copy of this catalytic activity value in millimoles per second
84	/// 
85	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
86	pub fn to_mmolps(&self) -> T {
87		return self.molps.clone() * T::from(1000.0_f64);
88	}
89
90	/// Returns a new catalytic activity value from the given number of millimoles per second
91	/// 
92	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
93	///
94	/// # Arguments
95	/// * `mmolps` - Any number-like type, representing a quantity of millimoles per second
96	pub fn from_mmolps(mmolps: T) -> Self {
97		CatalyticActivity{molps: mmolps * T::from(0.001_f64)}
98	}
99
100	/// Returns a copy of this catalytic activity value in micromoles per second
101	/// 
102	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
103	pub fn to_umolps(&self) -> T {
104		return self.molps.clone() * T::from(1000000.0_f64);
105	}
106
107	/// Returns a new catalytic activity value from the given number of micromoles per second
108	/// 
109	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
110	///
111	/// # Arguments
112	/// * `umolps` - Any number-like type, representing a quantity of micromoles per second
113	pub fn from_umolps(umolps: T) -> Self {
114		CatalyticActivity{molps: umolps * T::from(1e-06_f64)}
115	}
116
117	/// Returns a copy of this catalytic activity value in nanomoles per second
118	/// 
119	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
120	pub fn to_nmolps(&self) -> T {
121		return self.molps.clone() * T::from(1000000000.0_f64);
122	}
123
124	/// Returns a new catalytic activity value from the given number of nanomoles per second
125	/// 
126	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
127	///
128	/// # Arguments
129	/// * `nmolps` - Any number-like type, representing a quantity of nanomoles per second
130	pub fn from_nmolps(nmolps: T) -> Self {
131		CatalyticActivity{molps: nmolps * T::from(1e-09_f64)}
132	}
133
134}
135
136
137/// Multiplying a unit value by a scalar value returns a unit value
138#[cfg(feature="num-bigfloat")]
139impl core::ops::Mul<CatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
140	type Output = CatalyticActivity<num_bigfloat::BigFloat>;
141	fn mul(self, rhs: CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
142		CatalyticActivity{molps: self * rhs.molps}
143	}
144}
145/// Multiplying a unit value by a scalar value returns a unit value
146#[cfg(feature="num-bigfloat")]
147impl core::ops::Mul<CatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
148	type Output = CatalyticActivity<num_bigfloat::BigFloat>;
149	fn mul(self, rhs: CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
150		CatalyticActivity{molps: self.clone() * rhs.molps}
151	}
152}
153/// Multiplying a unit value by a scalar value returns a unit value
154#[cfg(feature="num-bigfloat")]
155impl core::ops::Mul<&CatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
156	type Output = CatalyticActivity<num_bigfloat::BigFloat>;
157	fn mul(self, rhs: &CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
158		CatalyticActivity{molps: self * rhs.molps.clone()}
159	}
160}
161/// Multiplying a unit value by a scalar value returns a unit value
162#[cfg(feature="num-bigfloat")]
163impl core::ops::Mul<&CatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
164	type Output = CatalyticActivity<num_bigfloat::BigFloat>;
165	fn mul(self, rhs: &CatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
166		CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
167	}
168}
169
170/// Multiplying a unit value by a scalar value returns a unit value
171#[cfg(feature="num-complex")]
172impl core::ops::Mul<CatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
173	type Output = CatalyticActivity<num_complex::Complex32>;
174	fn mul(self, rhs: CatalyticActivity<num_complex::Complex32>) -> Self::Output {
175		CatalyticActivity{molps: self * rhs.molps}
176	}
177}
178/// Multiplying a unit value by a scalar value returns a unit value
179#[cfg(feature="num-complex")]
180impl core::ops::Mul<CatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
181	type Output = CatalyticActivity<num_complex::Complex32>;
182	fn mul(self, rhs: CatalyticActivity<num_complex::Complex32>) -> Self::Output {
183		CatalyticActivity{molps: self.clone() * rhs.molps}
184	}
185}
186/// Multiplying a unit value by a scalar value returns a unit value
187#[cfg(feature="num-complex")]
188impl core::ops::Mul<&CatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
189	type Output = CatalyticActivity<num_complex::Complex32>;
190	fn mul(self, rhs: &CatalyticActivity<num_complex::Complex32>) -> Self::Output {
191		CatalyticActivity{molps: self * rhs.molps.clone()}
192	}
193}
194/// Multiplying a unit value by a scalar value returns a unit value
195#[cfg(feature="num-complex")]
196impl core::ops::Mul<&CatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
197	type Output = CatalyticActivity<num_complex::Complex32>;
198	fn mul(self, rhs: &CatalyticActivity<num_complex::Complex32>) -> Self::Output {
199		CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
200	}
201}
202
203/// Multiplying a unit value by a scalar value returns a unit value
204#[cfg(feature="num-complex")]
205impl core::ops::Mul<CatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
206	type Output = CatalyticActivity<num_complex::Complex64>;
207	fn mul(self, rhs: CatalyticActivity<num_complex::Complex64>) -> Self::Output {
208		CatalyticActivity{molps: self * rhs.molps}
209	}
210}
211/// Multiplying a unit value by a scalar value returns a unit value
212#[cfg(feature="num-complex")]
213impl core::ops::Mul<CatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
214	type Output = CatalyticActivity<num_complex::Complex64>;
215	fn mul(self, rhs: CatalyticActivity<num_complex::Complex64>) -> Self::Output {
216		CatalyticActivity{molps: self.clone() * rhs.molps}
217	}
218}
219/// Multiplying a unit value by a scalar value returns a unit value
220#[cfg(feature="num-complex")]
221impl core::ops::Mul<&CatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
222	type Output = CatalyticActivity<num_complex::Complex64>;
223	fn mul(self, rhs: &CatalyticActivity<num_complex::Complex64>) -> Self::Output {
224		CatalyticActivity{molps: self * rhs.molps.clone()}
225	}
226}
227/// Multiplying a unit value by a scalar value returns a unit value
228#[cfg(feature="num-complex")]
229impl core::ops::Mul<&CatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
230	type Output = CatalyticActivity<num_complex::Complex64>;
231	fn mul(self, rhs: &CatalyticActivity<num_complex::Complex64>) -> Self::Output {
232		CatalyticActivity{molps: self.clone() * rhs.molps.clone()}
233	}
234}
235
236
237
238/// Converts a CatalyticActivity into the equivalent [uom](https://crates.io/crates/uom) type [CatalyticActivity](https://docs.rs/uom/0.34.0/uom/si/f32/type.CatalyticActivity.html)
239#[cfg(feature = "uom")]
240impl<T> Into<uom::si::f32::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+Into<f32> {
241	fn into(self) -> uom::si::f32::CatalyticActivity {
242		uom::si::f32::CatalyticActivity::new::<uom::si::catalytic_activity::mole_per_second>(self.molps.into())
243	}
244}
245
246/// Creates a CatalyticActivity from the equivalent [uom](https://crates.io/crates/uom) type [CatalyticActivity](https://docs.rs/uom/0.34.0/uom/si/f32/type.CatalyticActivity.html)
247#[cfg(feature = "uom")]
248impl<T> From<uom::si::f32::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+From<f32> {
249	fn from(src: uom::si::f32::CatalyticActivity) -> Self {
250		CatalyticActivity{molps: T::from(src.value)}
251	}
252}
253
254/// Converts a CatalyticActivity into the equivalent [uom](https://crates.io/crates/uom) type [CatalyticActivity](https://docs.rs/uom/0.34.0/uom/si/f64/type.CatalyticActivity.html)
255#[cfg(feature = "uom")]
256impl<T> Into<uom::si::f64::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+Into<f64> {
257	fn into(self) -> uom::si::f64::CatalyticActivity {
258		uom::si::f64::CatalyticActivity::new::<uom::si::catalytic_activity::mole_per_second>(self.molps.into())
259	}
260}
261
262/// Creates a CatalyticActivity from the equivalent [uom](https://crates.io/crates/uom) type [CatalyticActivity](https://docs.rs/uom/0.34.0/uom/si/f64/type.CatalyticActivity.html)
263#[cfg(feature = "uom")]
264impl<T> From<uom::si::f64::CatalyticActivity> for CatalyticActivity<T> where T: NumLike+From<f64> {
265	fn from(src: uom::si::f64::CatalyticActivity) -> Self {
266		CatalyticActivity{molps: T::from(src.value)}
267	}
268}
269
270
271// CatalyticActivity / Amount -> Frequency
272/// Dividing a CatalyticActivity by a Amount returns a value of type Frequency
273impl<T> core::ops::Div<Amount<T>> for CatalyticActivity<T> where T: NumLike {
274	type Output = Frequency<T>;
275	fn div(self, rhs: Amount<T>) -> Self::Output {
276		Frequency{Hz: self.molps / rhs.mol}
277	}
278}
279/// Dividing a CatalyticActivity by a Amount returns a value of type Frequency
280impl<T> core::ops::Div<Amount<T>> for &CatalyticActivity<T> where T: NumLike {
281	type Output = Frequency<T>;
282	fn div(self, rhs: Amount<T>) -> Self::Output {
283		Frequency{Hz: self.molps.clone() / rhs.mol}
284	}
285}
286/// Dividing a CatalyticActivity by a Amount returns a value of type Frequency
287impl<T> core::ops::Div<&Amount<T>> for CatalyticActivity<T> where T: NumLike {
288	type Output = Frequency<T>;
289	fn div(self, rhs: &Amount<T>) -> Self::Output {
290		Frequency{Hz: self.molps / rhs.mol.clone()}
291	}
292}
293/// Dividing a CatalyticActivity by a Amount returns a value of type Frequency
294impl<T> core::ops::Div<&Amount<T>> for &CatalyticActivity<T> where T: NumLike {
295	type Output = Frequency<T>;
296	fn div(self, rhs: &Amount<T>) -> Self::Output {
297		Frequency{Hz: self.molps.clone() / rhs.mol.clone()}
298	}
299}
300
301// CatalyticActivity * InverseAmount -> Frequency
302/// Multiplying a CatalyticActivity by a InverseAmount returns a value of type Frequency
303impl<T> core::ops::Mul<InverseAmount<T>> for CatalyticActivity<T> where T: NumLike {
304	type Output = Frequency<T>;
305	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
306		Frequency{Hz: self.molps * rhs.per_mol}
307	}
308}
309/// Multiplying a CatalyticActivity by a InverseAmount returns a value of type Frequency
310impl<T> core::ops::Mul<InverseAmount<T>> for &CatalyticActivity<T> where T: NumLike {
311	type Output = Frequency<T>;
312	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
313		Frequency{Hz: self.molps.clone() * rhs.per_mol}
314	}
315}
316/// Multiplying a CatalyticActivity by a InverseAmount returns a value of type Frequency
317impl<T> core::ops::Mul<&InverseAmount<T>> for CatalyticActivity<T> where T: NumLike {
318	type Output = Frequency<T>;
319	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
320		Frequency{Hz: self.molps * rhs.per_mol.clone()}
321	}
322}
323/// Multiplying a CatalyticActivity by a InverseAmount returns a value of type Frequency
324impl<T> core::ops::Mul<&InverseAmount<T>> for &CatalyticActivity<T> where T: NumLike {
325	type Output = Frequency<T>;
326	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
327		Frequency{Hz: self.molps.clone() * rhs.per_mol.clone()}
328	}
329}
330
331// CatalyticActivity * Time -> Amount
332/// Multiplying a CatalyticActivity by a Time returns a value of type Amount
333impl<T> core::ops::Mul<Time<T>> for CatalyticActivity<T> where T: NumLike {
334	type Output = Amount<T>;
335	fn mul(self, rhs: Time<T>) -> Self::Output {
336		Amount{mol: self.molps * rhs.s}
337	}
338}
339/// Multiplying a CatalyticActivity by a Time returns a value of type Amount
340impl<T> core::ops::Mul<Time<T>> for &CatalyticActivity<T> where T: NumLike {
341	type Output = Amount<T>;
342	fn mul(self, rhs: Time<T>) -> Self::Output {
343		Amount{mol: self.molps.clone() * rhs.s}
344	}
345}
346/// Multiplying a CatalyticActivity by a Time returns a value of type Amount
347impl<T> core::ops::Mul<&Time<T>> for CatalyticActivity<T> where T: NumLike {
348	type Output = Amount<T>;
349	fn mul(self, rhs: &Time<T>) -> Self::Output {
350		Amount{mol: self.molps * rhs.s.clone()}
351	}
352}
353/// Multiplying a CatalyticActivity by a Time returns a value of type Amount
354impl<T> core::ops::Mul<&Time<T>> for &CatalyticActivity<T> where T: NumLike {
355	type Output = Amount<T>;
356	fn mul(self, rhs: &Time<T>) -> Self::Output {
357		Amount{mol: self.molps.clone() * rhs.s.clone()}
358	}
359}
360
361// CatalyticActivity / Frequency -> Amount
362/// Dividing a CatalyticActivity by a Frequency returns a value of type Amount
363impl<T> core::ops::Div<Frequency<T>> for CatalyticActivity<T> where T: NumLike {
364	type Output = Amount<T>;
365	fn div(self, rhs: Frequency<T>) -> Self::Output {
366		Amount{mol: self.molps / rhs.Hz}
367	}
368}
369/// Dividing a CatalyticActivity by a Frequency returns a value of type Amount
370impl<T> core::ops::Div<Frequency<T>> for &CatalyticActivity<T> where T: NumLike {
371	type Output = Amount<T>;
372	fn div(self, rhs: Frequency<T>) -> Self::Output {
373		Amount{mol: self.molps.clone() / rhs.Hz}
374	}
375}
376/// Dividing a CatalyticActivity by a Frequency returns a value of type Amount
377impl<T> core::ops::Div<&Frequency<T>> for CatalyticActivity<T> where T: NumLike {
378	type Output = Amount<T>;
379	fn div(self, rhs: &Frequency<T>) -> Self::Output {
380		Amount{mol: self.molps / rhs.Hz.clone()}
381	}
382}
383/// Dividing a CatalyticActivity by a Frequency returns a value of type Amount
384impl<T> core::ops::Div<&Frequency<T>> for &CatalyticActivity<T> where T: NumLike {
385	type Output = Amount<T>;
386	fn div(self, rhs: &Frequency<T>) -> Self::Output {
387		Amount{mol: self.molps.clone() / rhs.Hz.clone()}
388	}
389}
390
391// 1/CatalyticActivity -> InverseCatalyticActivity
392/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
393impl<T> core::ops::Div<CatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
394	type Output = InverseCatalyticActivity<T>;
395	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
396		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
397	}
398}
399/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
400impl<T> core::ops::Div<CatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
401	type Output = InverseCatalyticActivity<T>;
402	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
403		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
404	}
405}
406/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
407impl<T> core::ops::Div<&CatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
408	type Output = InverseCatalyticActivity<T>;
409	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
410		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
411	}
412}
413/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
414impl<T> core::ops::Div<&CatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
415	type Output = InverseCatalyticActivity<T>;
416	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
417		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
418	}
419}
420
421// 1/CatalyticActivity -> InverseCatalyticActivity
422/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
423impl<T> core::ops::Div<CatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
424	type Output = InverseCatalyticActivity<T>;
425	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
426		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
427	}
428}
429/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
430impl<T> core::ops::Div<CatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
431	type Output = InverseCatalyticActivity<T>;
432	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
433		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
434	}
435}
436/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
437impl<T> core::ops::Div<&CatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
438	type Output = InverseCatalyticActivity<T>;
439	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
440		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
441	}
442}
443/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
444impl<T> core::ops::Div<&CatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
445	type Output = InverseCatalyticActivity<T>;
446	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
447		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
448	}
449}
450
451// 1/CatalyticActivity -> InverseCatalyticActivity
452/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
453impl<T> core::ops::Div<CatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
454	type Output = InverseCatalyticActivity<T>;
455	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
456		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
457	}
458}
459/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
460impl<T> core::ops::Div<CatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
461	type Output = InverseCatalyticActivity<T>;
462	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
463		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
464	}
465}
466/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
467impl<T> core::ops::Div<&CatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
468	type Output = InverseCatalyticActivity<T>;
469	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
470		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
471	}
472}
473/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
474impl<T> core::ops::Div<&CatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
475	type Output = InverseCatalyticActivity<T>;
476	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
477		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
478	}
479}
480
481// 1/CatalyticActivity -> InverseCatalyticActivity
482/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
483impl<T> core::ops::Div<CatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
484	type Output = InverseCatalyticActivity<T>;
485	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
486		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
487	}
488}
489/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
490impl<T> core::ops::Div<CatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
491	type Output = InverseCatalyticActivity<T>;
492	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
493		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
494	}
495}
496/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
497impl<T> core::ops::Div<&CatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
498	type Output = InverseCatalyticActivity<T>;
499	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
500		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
501	}
502}
503/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
504impl<T> core::ops::Div<&CatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
505	type Output = InverseCatalyticActivity<T>;
506	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
507		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
508	}
509}
510
511// 1/CatalyticActivity -> InverseCatalyticActivity
512/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
513#[cfg(feature="num-bigfloat")]
514impl<T> core::ops::Div<CatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
515	type Output = InverseCatalyticActivity<T>;
516	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
517		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
518	}
519}
520/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
521#[cfg(feature="num-bigfloat")]
522impl<T> core::ops::Div<CatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
523	type Output = InverseCatalyticActivity<T>;
524	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
525		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
526	}
527}
528/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
529#[cfg(feature="num-bigfloat")]
530impl<T> core::ops::Div<&CatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
531	type Output = InverseCatalyticActivity<T>;
532	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
533		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
534	}
535}
536/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
537#[cfg(feature="num-bigfloat")]
538impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
539	type Output = InverseCatalyticActivity<T>;
540	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
541		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
542	}
543}
544
545// 1/CatalyticActivity -> InverseCatalyticActivity
546/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
547#[cfg(feature="num-complex")]
548impl<T> core::ops::Div<CatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
549	type Output = InverseCatalyticActivity<T>;
550	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
551		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
552	}
553}
554/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
555#[cfg(feature="num-complex")]
556impl<T> core::ops::Div<CatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
557	type Output = InverseCatalyticActivity<T>;
558	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
559		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
560	}
561}
562/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
563#[cfg(feature="num-complex")]
564impl<T> core::ops::Div<&CatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
565	type Output = InverseCatalyticActivity<T>;
566	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
567		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
568	}
569}
570/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
571#[cfg(feature="num-complex")]
572impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
573	type Output = InverseCatalyticActivity<T>;
574	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
575		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
576	}
577}
578
579// 1/CatalyticActivity -> InverseCatalyticActivity
580/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
581#[cfg(feature="num-complex")]
582impl<T> core::ops::Div<CatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
583	type Output = InverseCatalyticActivity<T>;
584	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
585		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps}
586	}
587}
588/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
589#[cfg(feature="num-complex")]
590impl<T> core::ops::Div<CatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
591	type Output = InverseCatalyticActivity<T>;
592	fn div(self, rhs: CatalyticActivity<T>) -> Self::Output {
593		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps}
594	}
595}
596/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
597#[cfg(feature="num-complex")]
598impl<T> core::ops::Div<&CatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
599	type Output = InverseCatalyticActivity<T>;
600	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
601		InverseCatalyticActivity{s_per_mol: T::from(self) / rhs.molps.clone()}
602	}
603}
604/// Dividing a scalar value by a CatalyticActivity unit value returns a value of type InverseCatalyticActivity
605#[cfg(feature="num-complex")]
606impl<T> core::ops::Div<&CatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
607	type Output = InverseCatalyticActivity<T>;
608	fn div(self, rhs: &CatalyticActivity<T>) -> Self::Output {
609		InverseCatalyticActivity{s_per_mol: T::from(self.clone()) / rhs.molps.clone()}
610	}
611}
612
613/// The chemical concentration unit type, defined as moles per cubic meter in SI units
614#[derive(UnitStruct, Debug, Clone)]
615#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
616pub struct Concentration<T: NumLike>{
617	/// The value of this Chemical concentration in moles per cubic meter
618	pub molpm3: T
619}
620
621impl<T> Concentration<T> where T: NumLike {
622
623	/// Returns the standard unit name of chemical concentration: "moles per cubic meter"
624	pub fn unit_name() -> &'static str { "moles per cubic meter" }
625	
626	/// Returns the abbreviated name or symbol of chemical concentration: "mol/m³" for moles per cubic meter
627	pub fn unit_symbol() -> &'static str { "mol/m³" }
628	
629	/// Returns a new chemical concentration value from the given number of moles per cubic meter
630	///
631	/// # Arguments
632	/// * `molpm3` - Any number-like type, representing a quantity of moles per cubic meter
633	pub fn from_molpm3(molpm3: T) -> Self { Concentration{molpm3: molpm3} }
634	
635	/// Returns a copy of this chemical concentration value in moles per cubic meter
636	pub fn to_molpm3(&self) -> T { self.molpm3.clone() }
637
638	/// Returns a new chemical concentration value from the given number of moles per cubic meter
639	///
640	/// # Arguments
641	/// * `moles_per_cubic_meter` - Any number-like type, representing a quantity of moles per cubic meter
642	pub fn from_moles_per_cubic_meter(moles_per_cubic_meter: T) -> Self { Concentration{molpm3: moles_per_cubic_meter} }
643	
644	/// Returns a copy of this chemical concentration value in moles per cubic meter
645	pub fn to_moles_per_cubic_meter(&self) -> T { self.molpm3.clone() }
646
647	/// Returns a new chemical concentration value from the given number of millimolar
648	///
649	/// # Arguments
650	/// * `mM` - Any number-like type, representing a quantity of moles per cubic meter
651	pub fn from_mM(mM: T) -> Self { Concentration{molpm3: mM} }
652	
653	/// Returns a copy of this chemical concentration value in millimolar
654	pub fn to_mM(&self) -> T { self.molpm3.clone() }
655
656}
657
658impl<T> fmt::Display for Concentration<T> where T: NumLike {
659	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
660		write!(f, "{} {}", &self.molpm3, Self::unit_symbol())
661	}
662}
663
664impl<T> Concentration<T> where T: NumLike+From<f64> {
665	
666	/// Returns a copy of this chemical concentration value in count per cubic meter
667	/// 
668	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
669	pub fn to_Npm3(&self) -> T {
670		return self.molpm3.clone() * T::from(6.02214076e+23_f64);
671	}
672
673	/// Returns a new chemical concentration value from the given number of count per cubic meter
674	/// 
675	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
676	///
677	/// # Arguments
678	/// * `Npm3` - Any number-like type, representing a quantity of count per cubic meter
679	pub fn from_Npm3(Npm3: T) -> Self {
680		Concentration{molpm3: Npm3 * T::from(1.66053906717385e-24_f64)}
681	}
682
683	/// Returns a copy of this chemical concentration value in count per cubic meter
684	/// 
685	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
686	pub fn to_count_per_cubic_meter(&self) -> T {
687		return self.molpm3.clone() * T::from(6.02214076e+23_f64);
688	}
689
690	/// Returns a new chemical concentration value from the given number of count per cubic meter
691	/// 
692	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
693	///
694	/// # Arguments
695	/// * `count_per_cubic_meter` - Any number-like type, representing a quantity of count per cubic meter
696	pub fn from_count_per_cubic_meter(count_per_cubic_meter: T) -> Self {
697		Concentration{molpm3: count_per_cubic_meter * T::from(1.66053906717385e-24_f64)}
698	}
699
700	/// Returns a copy of this chemical concentration value in count per liter
701	/// 
702	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
703	pub fn to_NpL(&self) -> T {
704		return self.molpm3.clone() * T::from(6.02214076e+26_f64);
705	}
706
707	/// Returns a new chemical concentration value from the given number of count per liter
708	/// 
709	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
710	///
711	/// # Arguments
712	/// * `NpL` - Any number-like type, representing a quantity of count per liter
713	pub fn from_NpL(NpL: T) -> Self {
714		Concentration{molpm3: NpL * T::from(1.66053906717385e-21_f64)}
715	}
716
717	/// Returns a copy of this chemical concentration value in count per liter
718	/// 
719	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
720	pub fn to_count_per_L(&self) -> T {
721		return self.molpm3.clone() * T::from(6.02214076e+26_f64);
722	}
723
724	/// Returns a new chemical concentration value from the given number of count per liter
725	/// 
726	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
727	///
728	/// # Arguments
729	/// * `count_per_L` - Any number-like type, representing a quantity of count per liter
730	pub fn from_count_per_L(count_per_L: T) -> Self {
731		Concentration{molpm3: count_per_L * T::from(1.66053906717385e-21_f64)}
732	}
733
734	/// Returns a copy of this chemical concentration value in count per cubic centimeter
735	/// 
736	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
737	pub fn to_Npcc(&self) -> T {
738		return self.molpm3.clone() * T::from(6.02214076e+29_f64);
739	}
740
741	/// Returns a new chemical concentration value from the given number of count per cubic centimeter
742	/// 
743	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
744	///
745	/// # Arguments
746	/// * `Npcc` - Any number-like type, representing a quantity of count per cubic centimeter
747	pub fn from_Npcc(Npcc: T) -> Self {
748		Concentration{molpm3: Npcc * T::from(1.66053906717385e-18_f64)}
749	}
750
751	/// Returns a copy of this chemical concentration value in count per cubic centimeter
752	/// 
753	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
754	pub fn to_count_per_cc(&self) -> T {
755		return self.molpm3.clone() * T::from(6.02214076e+29_f64);
756	}
757
758	/// Returns a new chemical concentration value from the given number of count per cubic centimeter
759	/// 
760	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
761	///
762	/// # Arguments
763	/// * `count_per_cc` - Any number-like type, representing a quantity of count per cubic centimeter
764	pub fn from_count_per_cc(count_per_cc: T) -> Self {
765		Concentration{molpm3: count_per_cc * T::from(1.66053906717385e-18_f64)}
766	}
767
768	/// Returns a copy of this chemical concentration value in moles per L
769	/// 
770	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
771	pub fn to_M(&self) -> T {
772		return self.molpm3.clone() * T::from(0.001_f64);
773	}
774
775	/// Returns a new chemical concentration value from the given number of moles per L
776	/// 
777	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
778	///
779	/// # Arguments
780	/// * `M` - Any number-like type, representing a quantity of moles per L
781	pub fn from_M(M: T) -> Self {
782		Concentration{molpm3: M * T::from(1000.0_f64)}
783	}
784
785	/// Returns a copy of this chemical concentration value in moles per liter
786	/// 
787	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
788	pub fn to_molarity(&self) -> T {
789		return self.molpm3.clone() * T::from(0.001_f64);
790	}
791
792	/// Returns a new chemical concentration value from the given number of moles per liter
793	/// 
794	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
795	///
796	/// # Arguments
797	/// * `molarity` - Any number-like type, representing a quantity of moles per liter
798	pub fn from_molarity(molarity: T) -> Self {
799		Concentration{molpm3: molarity * T::from(1000.0_f64)}
800	}
801
802	/// Returns a copy of this chemical concentration value in micromolar
803	/// 
804	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
805	pub fn to_uM(&self) -> T {
806		return self.molpm3.clone() * T::from(1000.0_f64);
807	}
808
809	/// Returns a new chemical concentration value from the given number of micromolar
810	/// 
811	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
812	///
813	/// # Arguments
814	/// * `uM` - Any number-like type, representing a quantity of micromolar
815	pub fn from_uM(uM: T) -> Self {
816		Concentration{molpm3: uM * T::from(0.001_f64)}
817	}
818
819	/// Returns a copy of this chemical concentration value in nanomolar
820	/// 
821	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
822	pub fn to_nM(&self) -> T {
823		return self.molpm3.clone() * T::from(1000000.0_f64);
824	}
825
826	/// Returns a new chemical concentration value from the given number of nanomolar
827	/// 
828	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
829	///
830	/// # Arguments
831	/// * `nM` - Any number-like type, representing a quantity of nanomolar
832	pub fn from_nM(nM: T) -> Self {
833		Concentration{molpm3: nM * T::from(1e-06_f64)}
834	}
835
836}
837
838
839/// Multiplying a unit value by a scalar value returns a unit value
840#[cfg(feature="num-bigfloat")]
841impl core::ops::Mul<Concentration<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
842	type Output = Concentration<num_bigfloat::BigFloat>;
843	fn mul(self, rhs: Concentration<num_bigfloat::BigFloat>) -> Self::Output {
844		Concentration{molpm3: self * rhs.molpm3}
845	}
846}
847/// Multiplying a unit value by a scalar value returns a unit value
848#[cfg(feature="num-bigfloat")]
849impl core::ops::Mul<Concentration<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
850	type Output = Concentration<num_bigfloat::BigFloat>;
851	fn mul(self, rhs: Concentration<num_bigfloat::BigFloat>) -> Self::Output {
852		Concentration{molpm3: self.clone() * rhs.molpm3}
853	}
854}
855/// Multiplying a unit value by a scalar value returns a unit value
856#[cfg(feature="num-bigfloat")]
857impl core::ops::Mul<&Concentration<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
858	type Output = Concentration<num_bigfloat::BigFloat>;
859	fn mul(self, rhs: &Concentration<num_bigfloat::BigFloat>) -> Self::Output {
860		Concentration{molpm3: self * rhs.molpm3.clone()}
861	}
862}
863/// Multiplying a unit value by a scalar value returns a unit value
864#[cfg(feature="num-bigfloat")]
865impl core::ops::Mul<&Concentration<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
866	type Output = Concentration<num_bigfloat::BigFloat>;
867	fn mul(self, rhs: &Concentration<num_bigfloat::BigFloat>) -> Self::Output {
868		Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
869	}
870}
871
872/// Multiplying a unit value by a scalar value returns a unit value
873#[cfg(feature="num-complex")]
874impl core::ops::Mul<Concentration<num_complex::Complex32>> for num_complex::Complex32 {
875	type Output = Concentration<num_complex::Complex32>;
876	fn mul(self, rhs: Concentration<num_complex::Complex32>) -> Self::Output {
877		Concentration{molpm3: self * rhs.molpm3}
878	}
879}
880/// Multiplying a unit value by a scalar value returns a unit value
881#[cfg(feature="num-complex")]
882impl core::ops::Mul<Concentration<num_complex::Complex32>> for &num_complex::Complex32 {
883	type Output = Concentration<num_complex::Complex32>;
884	fn mul(self, rhs: Concentration<num_complex::Complex32>) -> Self::Output {
885		Concentration{molpm3: self.clone() * rhs.molpm3}
886	}
887}
888/// Multiplying a unit value by a scalar value returns a unit value
889#[cfg(feature="num-complex")]
890impl core::ops::Mul<&Concentration<num_complex::Complex32>> for num_complex::Complex32 {
891	type Output = Concentration<num_complex::Complex32>;
892	fn mul(self, rhs: &Concentration<num_complex::Complex32>) -> Self::Output {
893		Concentration{molpm3: self * rhs.molpm3.clone()}
894	}
895}
896/// Multiplying a unit value by a scalar value returns a unit value
897#[cfg(feature="num-complex")]
898impl core::ops::Mul<&Concentration<num_complex::Complex32>> for &num_complex::Complex32 {
899	type Output = Concentration<num_complex::Complex32>;
900	fn mul(self, rhs: &Concentration<num_complex::Complex32>) -> Self::Output {
901		Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
902	}
903}
904
905/// Multiplying a unit value by a scalar value returns a unit value
906#[cfg(feature="num-complex")]
907impl core::ops::Mul<Concentration<num_complex::Complex64>> for num_complex::Complex64 {
908	type Output = Concentration<num_complex::Complex64>;
909	fn mul(self, rhs: Concentration<num_complex::Complex64>) -> Self::Output {
910		Concentration{molpm3: self * rhs.molpm3}
911	}
912}
913/// Multiplying a unit value by a scalar value returns a unit value
914#[cfg(feature="num-complex")]
915impl core::ops::Mul<Concentration<num_complex::Complex64>> for &num_complex::Complex64 {
916	type Output = Concentration<num_complex::Complex64>;
917	fn mul(self, rhs: Concentration<num_complex::Complex64>) -> Self::Output {
918		Concentration{molpm3: self.clone() * rhs.molpm3}
919	}
920}
921/// Multiplying a unit value by a scalar value returns a unit value
922#[cfg(feature="num-complex")]
923impl core::ops::Mul<&Concentration<num_complex::Complex64>> for num_complex::Complex64 {
924	type Output = Concentration<num_complex::Complex64>;
925	fn mul(self, rhs: &Concentration<num_complex::Complex64>) -> Self::Output {
926		Concentration{molpm3: self * rhs.molpm3.clone()}
927	}
928}
929/// Multiplying a unit value by a scalar value returns a unit value
930#[cfg(feature="num-complex")]
931impl core::ops::Mul<&Concentration<num_complex::Complex64>> for &num_complex::Complex64 {
932	type Output = Concentration<num_complex::Complex64>;
933	fn mul(self, rhs: &Concentration<num_complex::Complex64>) -> Self::Output {
934		Concentration{molpm3: self.clone() * rhs.molpm3.clone()}
935	}
936}
937
938
939
940/// Converts a Concentration into the equivalent [uom](https://crates.io/crates/uom) type [MolarConcentration](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarConcentration.html)
941#[cfg(feature = "uom")]
942impl<T> Into<uom::si::f32::MolarConcentration> for Concentration<T> where T: NumLike+Into<f32> {
943	fn into(self) -> uom::si::f32::MolarConcentration {
944		uom::si::f32::MolarConcentration::new::<uom::si::molar_concentration::mole_per_cubic_meter>(self.molpm3.into())
945	}
946}
947
948/// Creates a Concentration from the equivalent [uom](https://crates.io/crates/uom) type [MolarConcentration](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarConcentration.html)
949#[cfg(feature = "uom")]
950impl<T> From<uom::si::f32::MolarConcentration> for Concentration<T> where T: NumLike+From<f32> {
951	fn from(src: uom::si::f32::MolarConcentration) -> Self {
952		Concentration{molpm3: T::from(src.value)}
953	}
954}
955
956/// Converts a Concentration into the equivalent [uom](https://crates.io/crates/uom) type [MolarConcentration](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarConcentration.html)
957#[cfg(feature = "uom")]
958impl<T> Into<uom::si::f64::MolarConcentration> for Concentration<T> where T: NumLike+Into<f64> {
959	fn into(self) -> uom::si::f64::MolarConcentration {
960		uom::si::f64::MolarConcentration::new::<uom::si::molar_concentration::mole_per_cubic_meter>(self.molpm3.into())
961	}
962}
963
964/// Creates a Concentration from the equivalent [uom](https://crates.io/crates/uom) type [MolarConcentration](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarConcentration.html)
965#[cfg(feature = "uom")]
966impl<T> From<uom::si::f64::MolarConcentration> for Concentration<T> where T: NumLike+From<f64> {
967	fn from(src: uom::si::f64::MolarConcentration) -> Self {
968		Concentration{molpm3: T::from(src.value)}
969	}
970}
971
972
973// Concentration / Amount -> InverseVolume
974/// Dividing a Concentration by a Amount returns a value of type InverseVolume
975impl<T> core::ops::Div<Amount<T>> for Concentration<T> where T: NumLike {
976	type Output = InverseVolume<T>;
977	fn div(self, rhs: Amount<T>) -> Self::Output {
978		InverseVolume{per_m3: self.molpm3 / rhs.mol}
979	}
980}
981/// Dividing a Concentration by a Amount returns a value of type InverseVolume
982impl<T> core::ops::Div<Amount<T>> for &Concentration<T> where T: NumLike {
983	type Output = InverseVolume<T>;
984	fn div(self, rhs: Amount<T>) -> Self::Output {
985		InverseVolume{per_m3: self.molpm3.clone() / rhs.mol}
986	}
987}
988/// Dividing a Concentration by a Amount returns a value of type InverseVolume
989impl<T> core::ops::Div<&Amount<T>> for Concentration<T> where T: NumLike {
990	type Output = InverseVolume<T>;
991	fn div(self, rhs: &Amount<T>) -> Self::Output {
992		InverseVolume{per_m3: self.molpm3 / rhs.mol.clone()}
993	}
994}
995/// Dividing a Concentration by a Amount returns a value of type InverseVolume
996impl<T> core::ops::Div<&Amount<T>> for &Concentration<T> where T: NumLike {
997	type Output = InverseVolume<T>;
998	fn div(self, rhs: &Amount<T>) -> Self::Output {
999		InverseVolume{per_m3: self.molpm3.clone() / rhs.mol.clone()}
1000	}
1001}
1002
1003// Concentration * InverseAmount -> InverseVolume
1004/// Multiplying a Concentration by a InverseAmount returns a value of type InverseVolume
1005impl<T> core::ops::Mul<InverseAmount<T>> for Concentration<T> where T: NumLike {
1006	type Output = InverseVolume<T>;
1007	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
1008		InverseVolume{per_m3: self.molpm3 * rhs.per_mol}
1009	}
1010}
1011/// Multiplying a Concentration by a InverseAmount returns a value of type InverseVolume
1012impl<T> core::ops::Mul<InverseAmount<T>> for &Concentration<T> where T: NumLike {
1013	type Output = InverseVolume<T>;
1014	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
1015		InverseVolume{per_m3: self.molpm3.clone() * rhs.per_mol}
1016	}
1017}
1018/// Multiplying a Concentration by a InverseAmount returns a value of type InverseVolume
1019impl<T> core::ops::Mul<&InverseAmount<T>> for Concentration<T> where T: NumLike {
1020	type Output = InverseVolume<T>;
1021	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
1022		InverseVolume{per_m3: self.molpm3 * rhs.per_mol.clone()}
1023	}
1024}
1025/// Multiplying a Concentration by a InverseAmount returns a value of type InverseVolume
1026impl<T> core::ops::Mul<&InverseAmount<T>> for &Concentration<T> where T: NumLike {
1027	type Output = InverseVolume<T>;
1028	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
1029		InverseVolume{per_m3: self.molpm3.clone() * rhs.per_mol.clone()}
1030	}
1031}
1032
1033// Concentration / Molality -> Density
1034/// Dividing a Concentration by a Molality returns a value of type Density
1035impl<T> core::ops::Div<Molality<T>> for Concentration<T> where T: NumLike {
1036	type Output = Density<T>;
1037	fn div(self, rhs: Molality<T>) -> Self::Output {
1038		Density{kgpm3: self.molpm3 / rhs.molpkg}
1039	}
1040}
1041/// Dividing a Concentration by a Molality returns a value of type Density
1042impl<T> core::ops::Div<Molality<T>> for &Concentration<T> where T: NumLike {
1043	type Output = Density<T>;
1044	fn div(self, rhs: Molality<T>) -> Self::Output {
1045		Density{kgpm3: self.molpm3.clone() / rhs.molpkg}
1046	}
1047}
1048/// Dividing a Concentration by a Molality returns a value of type Density
1049impl<T> core::ops::Div<&Molality<T>> for Concentration<T> where T: NumLike {
1050	type Output = Density<T>;
1051	fn div(self, rhs: &Molality<T>) -> Self::Output {
1052		Density{kgpm3: self.molpm3 / rhs.molpkg.clone()}
1053	}
1054}
1055/// Dividing a Concentration by a Molality returns a value of type Density
1056impl<T> core::ops::Div<&Molality<T>> for &Concentration<T> where T: NumLike {
1057	type Output = Density<T>;
1058	fn div(self, rhs: &Molality<T>) -> Self::Output {
1059		Density{kgpm3: self.molpm3.clone() / rhs.molpkg.clone()}
1060	}
1061}
1062
1063// Concentration * MolarMass -> Density
1064/// Multiplying a Concentration by a MolarMass returns a value of type Density
1065impl<T> core::ops::Mul<MolarMass<T>> for Concentration<T> where T: NumLike {
1066	type Output = Density<T>;
1067	fn mul(self, rhs: MolarMass<T>) -> Self::Output {
1068		Density{kgpm3: self.molpm3 * rhs.kgpmol}
1069	}
1070}
1071/// Multiplying a Concentration by a MolarMass returns a value of type Density
1072impl<T> core::ops::Mul<MolarMass<T>> for &Concentration<T> where T: NumLike {
1073	type Output = Density<T>;
1074	fn mul(self, rhs: MolarMass<T>) -> Self::Output {
1075		Density{kgpm3: self.molpm3.clone() * rhs.kgpmol}
1076	}
1077}
1078/// Multiplying a Concentration by a MolarMass returns a value of type Density
1079impl<T> core::ops::Mul<&MolarMass<T>> for Concentration<T> where T: NumLike {
1080	type Output = Density<T>;
1081	fn mul(self, rhs: &MolarMass<T>) -> Self::Output {
1082		Density{kgpm3: self.molpm3 * rhs.kgpmol.clone()}
1083	}
1084}
1085/// Multiplying a Concentration by a MolarMass returns a value of type Density
1086impl<T> core::ops::Mul<&MolarMass<T>> for &Concentration<T> where T: NumLike {
1087	type Output = Density<T>;
1088	fn mul(self, rhs: &MolarMass<T>) -> Self::Output {
1089		Density{kgpm3: self.molpm3.clone() * rhs.kgpmol.clone()}
1090	}
1091}
1092
1093// Concentration / InverseVolume -> Amount
1094/// Dividing a Concentration by a InverseVolume returns a value of type Amount
1095impl<T> core::ops::Div<InverseVolume<T>> for Concentration<T> where T: NumLike {
1096	type Output = Amount<T>;
1097	fn div(self, rhs: InverseVolume<T>) -> Self::Output {
1098		Amount{mol: self.molpm3 / rhs.per_m3}
1099	}
1100}
1101/// Dividing a Concentration by a InverseVolume returns a value of type Amount
1102impl<T> core::ops::Div<InverseVolume<T>> for &Concentration<T> where T: NumLike {
1103	type Output = Amount<T>;
1104	fn div(self, rhs: InverseVolume<T>) -> Self::Output {
1105		Amount{mol: self.molpm3.clone() / rhs.per_m3}
1106	}
1107}
1108/// Dividing a Concentration by a InverseVolume returns a value of type Amount
1109impl<T> core::ops::Div<&InverseVolume<T>> for Concentration<T> where T: NumLike {
1110	type Output = Amount<T>;
1111	fn div(self, rhs: &InverseVolume<T>) -> Self::Output {
1112		Amount{mol: self.molpm3 / rhs.per_m3.clone()}
1113	}
1114}
1115/// Dividing a Concentration by a InverseVolume returns a value of type Amount
1116impl<T> core::ops::Div<&InverseVolume<T>> for &Concentration<T> where T: NumLike {
1117	type Output = Amount<T>;
1118	fn div(self, rhs: &InverseVolume<T>) -> Self::Output {
1119		Amount{mol: self.molpm3.clone() / rhs.per_m3.clone()}
1120	}
1121}
1122
1123// Concentration * Volume -> Amount
1124/// Multiplying a Concentration by a Volume returns a value of type Amount
1125impl<T> core::ops::Mul<Volume<T>> for Concentration<T> where T: NumLike {
1126	type Output = Amount<T>;
1127	fn mul(self, rhs: Volume<T>) -> Self::Output {
1128		Amount{mol: self.molpm3 * rhs.m3}
1129	}
1130}
1131/// Multiplying a Concentration by a Volume returns a value of type Amount
1132impl<T> core::ops::Mul<Volume<T>> for &Concentration<T> where T: NumLike {
1133	type Output = Amount<T>;
1134	fn mul(self, rhs: Volume<T>) -> Self::Output {
1135		Amount{mol: self.molpm3.clone() * rhs.m3}
1136	}
1137}
1138/// Multiplying a Concentration by a Volume returns a value of type Amount
1139impl<T> core::ops::Mul<&Volume<T>> for Concentration<T> where T: NumLike {
1140	type Output = Amount<T>;
1141	fn mul(self, rhs: &Volume<T>) -> Self::Output {
1142		Amount{mol: self.molpm3 * rhs.m3.clone()}
1143	}
1144}
1145/// Multiplying a Concentration by a Volume returns a value of type Amount
1146impl<T> core::ops::Mul<&Volume<T>> for &Concentration<T> where T: NumLike {
1147	type Output = Amount<T>;
1148	fn mul(self, rhs: &Volume<T>) -> Self::Output {
1149		Amount{mol: self.molpm3.clone() * rhs.m3.clone()}
1150	}
1151}
1152
1153// Concentration / Density -> Molality
1154/// Dividing a Concentration by a Density returns a value of type Molality
1155impl<T> core::ops::Div<Density<T>> for Concentration<T> where T: NumLike {
1156	type Output = Molality<T>;
1157	fn div(self, rhs: Density<T>) -> Self::Output {
1158		Molality{molpkg: self.molpm3 / rhs.kgpm3}
1159	}
1160}
1161/// Dividing a Concentration by a Density returns a value of type Molality
1162impl<T> core::ops::Div<Density<T>> for &Concentration<T> where T: NumLike {
1163	type Output = Molality<T>;
1164	fn div(self, rhs: Density<T>) -> Self::Output {
1165		Molality{molpkg: self.molpm3.clone() / rhs.kgpm3}
1166	}
1167}
1168/// Dividing a Concentration by a Density returns a value of type Molality
1169impl<T> core::ops::Div<&Density<T>> for Concentration<T> where T: NumLike {
1170	type Output = Molality<T>;
1171	fn div(self, rhs: &Density<T>) -> Self::Output {
1172		Molality{molpkg: self.molpm3 / rhs.kgpm3.clone()}
1173	}
1174}
1175/// Dividing a Concentration by a Density returns a value of type Molality
1176impl<T> core::ops::Div<&Density<T>> for &Concentration<T> where T: NumLike {
1177	type Output = Molality<T>;
1178	fn div(self, rhs: &Density<T>) -> Self::Output {
1179		Molality{molpkg: self.molpm3.clone() / rhs.kgpm3.clone()}
1180	}
1181}
1182
1183// Concentration * VolumePerMass -> Molality
1184/// Multiplying a Concentration by a VolumePerMass returns a value of type Molality
1185impl<T> core::ops::Mul<VolumePerMass<T>> for Concentration<T> where T: NumLike {
1186	type Output = Molality<T>;
1187	fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
1188		Molality{molpkg: self.molpm3 * rhs.m3_per_kg}
1189	}
1190}
1191/// Multiplying a Concentration by a VolumePerMass returns a value of type Molality
1192impl<T> core::ops::Mul<VolumePerMass<T>> for &Concentration<T> where T: NumLike {
1193	type Output = Molality<T>;
1194	fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
1195		Molality{molpkg: self.molpm3.clone() * rhs.m3_per_kg}
1196	}
1197}
1198/// Multiplying a Concentration by a VolumePerMass returns a value of type Molality
1199impl<T> core::ops::Mul<&VolumePerMass<T>> for Concentration<T> where T: NumLike {
1200	type Output = Molality<T>;
1201	fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
1202		Molality{molpkg: self.molpm3 * rhs.m3_per_kg.clone()}
1203	}
1204}
1205/// Multiplying a Concentration by a VolumePerMass returns a value of type Molality
1206impl<T> core::ops::Mul<&VolumePerMass<T>> for &Concentration<T> where T: NumLike {
1207	type Output = Molality<T>;
1208	fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
1209		Molality{molpkg: self.molpm3.clone() * rhs.m3_per_kg.clone()}
1210	}
1211}
1212
1213// 1/Concentration -> MolarVolume
1214/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1215impl<T> core::ops::Div<Concentration<T>> for f64 where T: NumLike+From<f64> {
1216	type Output = MolarVolume<T>;
1217	fn div(self, rhs: Concentration<T>) -> Self::Output {
1218		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1219	}
1220}
1221/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1222impl<T> core::ops::Div<Concentration<T>> for &f64 where T: NumLike+From<f64> {
1223	type Output = MolarVolume<T>;
1224	fn div(self, rhs: Concentration<T>) -> Self::Output {
1225		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1226	}
1227}
1228/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1229impl<T> core::ops::Div<&Concentration<T>> for f64 where T: NumLike+From<f64> {
1230	type Output = MolarVolume<T>;
1231	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1232		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1233	}
1234}
1235/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1236impl<T> core::ops::Div<&Concentration<T>> for &f64 where T: NumLike+From<f64> {
1237	type Output = MolarVolume<T>;
1238	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1239		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1240	}
1241}
1242
1243// 1/Concentration -> MolarVolume
1244/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1245impl<T> core::ops::Div<Concentration<T>> for f32 where T: NumLike+From<f32> {
1246	type Output = MolarVolume<T>;
1247	fn div(self, rhs: Concentration<T>) -> Self::Output {
1248		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1249	}
1250}
1251/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1252impl<T> core::ops::Div<Concentration<T>> for &f32 where T: NumLike+From<f32> {
1253	type Output = MolarVolume<T>;
1254	fn div(self, rhs: Concentration<T>) -> Self::Output {
1255		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1256	}
1257}
1258/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1259impl<T> core::ops::Div<&Concentration<T>> for f32 where T: NumLike+From<f32> {
1260	type Output = MolarVolume<T>;
1261	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1262		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1263	}
1264}
1265/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1266impl<T> core::ops::Div<&Concentration<T>> for &f32 where T: NumLike+From<f32> {
1267	type Output = MolarVolume<T>;
1268	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1269		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1270	}
1271}
1272
1273// 1/Concentration -> MolarVolume
1274/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1275impl<T> core::ops::Div<Concentration<T>> for i64 where T: NumLike+From<i64> {
1276	type Output = MolarVolume<T>;
1277	fn div(self, rhs: Concentration<T>) -> Self::Output {
1278		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1279	}
1280}
1281/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1282impl<T> core::ops::Div<Concentration<T>> for &i64 where T: NumLike+From<i64> {
1283	type Output = MolarVolume<T>;
1284	fn div(self, rhs: Concentration<T>) -> Self::Output {
1285		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1286	}
1287}
1288/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1289impl<T> core::ops::Div<&Concentration<T>> for i64 where T: NumLike+From<i64> {
1290	type Output = MolarVolume<T>;
1291	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1292		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1293	}
1294}
1295/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1296impl<T> core::ops::Div<&Concentration<T>> for &i64 where T: NumLike+From<i64> {
1297	type Output = MolarVolume<T>;
1298	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1299		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1300	}
1301}
1302
1303// 1/Concentration -> MolarVolume
1304/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1305impl<T> core::ops::Div<Concentration<T>> for i32 where T: NumLike+From<i32> {
1306	type Output = MolarVolume<T>;
1307	fn div(self, rhs: Concentration<T>) -> Self::Output {
1308		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1309	}
1310}
1311/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1312impl<T> core::ops::Div<Concentration<T>> for &i32 where T: NumLike+From<i32> {
1313	type Output = MolarVolume<T>;
1314	fn div(self, rhs: Concentration<T>) -> Self::Output {
1315		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1316	}
1317}
1318/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1319impl<T> core::ops::Div<&Concentration<T>> for i32 where T: NumLike+From<i32> {
1320	type Output = MolarVolume<T>;
1321	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1322		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1323	}
1324}
1325/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1326impl<T> core::ops::Div<&Concentration<T>> for &i32 where T: NumLike+From<i32> {
1327	type Output = MolarVolume<T>;
1328	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1329		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1330	}
1331}
1332
1333// 1/Concentration -> MolarVolume
1334/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1335#[cfg(feature="num-bigfloat")]
1336impl<T> core::ops::Div<Concentration<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1337	type Output = MolarVolume<T>;
1338	fn div(self, rhs: Concentration<T>) -> Self::Output {
1339		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1340	}
1341}
1342/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1343#[cfg(feature="num-bigfloat")]
1344impl<T> core::ops::Div<Concentration<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1345	type Output = MolarVolume<T>;
1346	fn div(self, rhs: Concentration<T>) -> Self::Output {
1347		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1348	}
1349}
1350/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1351#[cfg(feature="num-bigfloat")]
1352impl<T> core::ops::Div<&Concentration<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1353	type Output = MolarVolume<T>;
1354	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1355		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1356	}
1357}
1358/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1359#[cfg(feature="num-bigfloat")]
1360impl<T> core::ops::Div<&Concentration<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1361	type Output = MolarVolume<T>;
1362	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1363		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1364	}
1365}
1366
1367// 1/Concentration -> MolarVolume
1368/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1369#[cfg(feature="num-complex")]
1370impl<T> core::ops::Div<Concentration<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1371	type Output = MolarVolume<T>;
1372	fn div(self, rhs: Concentration<T>) -> Self::Output {
1373		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1374	}
1375}
1376/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1377#[cfg(feature="num-complex")]
1378impl<T> core::ops::Div<Concentration<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1379	type Output = MolarVolume<T>;
1380	fn div(self, rhs: Concentration<T>) -> Self::Output {
1381		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1382	}
1383}
1384/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1385#[cfg(feature="num-complex")]
1386impl<T> core::ops::Div<&Concentration<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1387	type Output = MolarVolume<T>;
1388	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1389		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1390	}
1391}
1392/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1393#[cfg(feature="num-complex")]
1394impl<T> core::ops::Div<&Concentration<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1395	type Output = MolarVolume<T>;
1396	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1397		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1398	}
1399}
1400
1401// 1/Concentration -> MolarVolume
1402/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1403#[cfg(feature="num-complex")]
1404impl<T> core::ops::Div<Concentration<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1405	type Output = MolarVolume<T>;
1406	fn div(self, rhs: Concentration<T>) -> Self::Output {
1407		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3}
1408	}
1409}
1410/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1411#[cfg(feature="num-complex")]
1412impl<T> core::ops::Div<Concentration<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1413	type Output = MolarVolume<T>;
1414	fn div(self, rhs: Concentration<T>) -> Self::Output {
1415		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3}
1416	}
1417}
1418/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1419#[cfg(feature="num-complex")]
1420impl<T> core::ops::Div<&Concentration<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1421	type Output = MolarVolume<T>;
1422	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1423		MolarVolume{m3_per_mol: T::from(self) / rhs.molpm3.clone()}
1424	}
1425}
1426/// Dividing a scalar value by a Concentration unit value returns a value of type MolarVolume
1427#[cfg(feature="num-complex")]
1428impl<T> core::ops::Div<&Concentration<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1429	type Output = MolarVolume<T>;
1430	fn div(self, rhs: &Concentration<T>) -> Self::Output {
1431		MolarVolume{m3_per_mol: T::from(self.clone()) / rhs.molpm3.clone()}
1432	}
1433}
1434
1435/// The inverse of catalytic activity unit type, defined as seconds per mole in SI units
1436#[derive(UnitStruct, Debug, Clone)]
1437#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
1438pub struct InverseCatalyticActivity<T: NumLike>{
1439	/// The value of this Inverse catalytic activity in seconds per mole
1440	pub s_per_mol: T
1441}
1442
1443impl<T> InverseCatalyticActivity<T> where T: NumLike {
1444
1445	/// Returns the standard unit name of inverse catalytic activity: "seconds per mole"
1446	pub fn unit_name() -> &'static str { "seconds per mole" }
1447	
1448	/// Returns the abbreviated name or symbol of inverse catalytic activity: "s/mol" for seconds per mole
1449	pub fn unit_symbol() -> &'static str { "s/mol" }
1450	
1451	/// Returns a new inverse catalytic activity value from the given number of seconds per mole
1452	///
1453	/// # Arguments
1454	/// * `s_per_mol` - Any number-like type, representing a quantity of seconds per mole
1455	pub fn from_s_per_mol(s_per_mol: T) -> Self { InverseCatalyticActivity{s_per_mol: s_per_mol} }
1456	
1457	/// Returns a copy of this inverse catalytic activity value in seconds per mole
1458	pub fn to_s_per_mol(&self) -> T { self.s_per_mol.clone() }
1459
1460	/// Returns a new inverse catalytic activity value from the given number of seconds per mole
1461	///
1462	/// # Arguments
1463	/// * `seconds_per_mole` - Any number-like type, representing a quantity of seconds per mole
1464	pub fn from_seconds_per_mole(seconds_per_mole: T) -> Self { InverseCatalyticActivity{s_per_mol: seconds_per_mole} }
1465	
1466	/// Returns a copy of this inverse catalytic activity value in seconds per mole
1467	pub fn to_seconds_per_mole(&self) -> T { self.s_per_mol.clone() }
1468
1469}
1470
1471impl<T> fmt::Display for InverseCatalyticActivity<T> where T: NumLike {
1472	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1473		write!(f, "{} {}", &self.s_per_mol, Self::unit_symbol())
1474	}
1475}
1476
1477impl<T> InverseCatalyticActivity<T> where T: NumLike+From<f64> {
1478	
1479	/// Returns a copy of this inverse catalytic activity value in minutes per mole
1480	/// 
1481	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
1482	pub fn to_minutes_per_mole(&self) -> T {
1483		return self.s_per_mol.clone() * T::from(0.0166666666666667_f64);
1484	}
1485
1486	/// Returns a new inverse catalytic activity value from the given number of minutes per mole
1487	/// 
1488	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
1489	///
1490	/// # Arguments
1491	/// * `minutes_per_mole` - Any number-like type, representing a quantity of minutes per mole
1492	pub fn from_minutes_per_mole(minutes_per_mole: T) -> Self {
1493		InverseCatalyticActivity{s_per_mol: minutes_per_mole * T::from(60.0_f64)}
1494	}
1495
1496	/// Returns a copy of this inverse catalytic activity value in hours per mol
1497	/// 
1498	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
1499	pub fn to_hours_per_mole(&self) -> T {
1500		return self.s_per_mol.clone() * T::from(0.000277777777777778_f64);
1501	}
1502
1503	/// Returns a new inverse catalytic activity value from the given number of hours per mol
1504	/// 
1505	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
1506	///
1507	/// # Arguments
1508	/// * `hours_per_mole` - Any number-like type, representing a quantity of hours per mol
1509	pub fn from_hours_per_mole(hours_per_mole: T) -> Self {
1510		InverseCatalyticActivity{s_per_mol: hours_per_mole * T::from(3600.0_f64)}
1511	}
1512
1513}
1514
1515
1516/// Multiplying a unit value by a scalar value returns a unit value
1517#[cfg(feature="num-bigfloat")]
1518impl core::ops::Mul<InverseCatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
1519	type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1520	fn mul(self, rhs: InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1521		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1522	}
1523}
1524/// Multiplying a unit value by a scalar value returns a unit value
1525#[cfg(feature="num-bigfloat")]
1526impl core::ops::Mul<InverseCatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
1527	type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1528	fn mul(self, rhs: InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1529		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1530	}
1531}
1532/// Multiplying a unit value by a scalar value returns a unit value
1533#[cfg(feature="num-bigfloat")]
1534impl core::ops::Mul<&InverseCatalyticActivity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
1535	type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1536	fn mul(self, rhs: &InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1537		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1538	}
1539}
1540/// Multiplying a unit value by a scalar value returns a unit value
1541#[cfg(feature="num-bigfloat")]
1542impl core::ops::Mul<&InverseCatalyticActivity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
1543	type Output = InverseCatalyticActivity<num_bigfloat::BigFloat>;
1544	fn mul(self, rhs: &InverseCatalyticActivity<num_bigfloat::BigFloat>) -> Self::Output {
1545		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1546	}
1547}
1548
1549/// Multiplying a unit value by a scalar value returns a unit value
1550#[cfg(feature="num-complex")]
1551impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
1552	type Output = InverseCatalyticActivity<num_complex::Complex32>;
1553	fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1554		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1555	}
1556}
1557/// Multiplying a unit value by a scalar value returns a unit value
1558#[cfg(feature="num-complex")]
1559impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
1560	type Output = InverseCatalyticActivity<num_complex::Complex32>;
1561	fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1562		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1563	}
1564}
1565/// Multiplying a unit value by a scalar value returns a unit value
1566#[cfg(feature="num-complex")]
1567impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex32>> for num_complex::Complex32 {
1568	type Output = InverseCatalyticActivity<num_complex::Complex32>;
1569	fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1570		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1571	}
1572}
1573/// Multiplying a unit value by a scalar value returns a unit value
1574#[cfg(feature="num-complex")]
1575impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex32>> for &num_complex::Complex32 {
1576	type Output = InverseCatalyticActivity<num_complex::Complex32>;
1577	fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex32>) -> Self::Output {
1578		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1579	}
1580}
1581
1582/// Multiplying a unit value by a scalar value returns a unit value
1583#[cfg(feature="num-complex")]
1584impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
1585	type Output = InverseCatalyticActivity<num_complex::Complex64>;
1586	fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1587		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol}
1588	}
1589}
1590/// Multiplying a unit value by a scalar value returns a unit value
1591#[cfg(feature="num-complex")]
1592impl core::ops::Mul<InverseCatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
1593	type Output = InverseCatalyticActivity<num_complex::Complex64>;
1594	fn mul(self, rhs: InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1595		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol}
1596	}
1597}
1598/// Multiplying a unit value by a scalar value returns a unit value
1599#[cfg(feature="num-complex")]
1600impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex64>> for num_complex::Complex64 {
1601	type Output = InverseCatalyticActivity<num_complex::Complex64>;
1602	fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1603		InverseCatalyticActivity{s_per_mol: self * rhs.s_per_mol.clone()}
1604	}
1605}
1606/// Multiplying a unit value by a scalar value returns a unit value
1607#[cfg(feature="num-complex")]
1608impl core::ops::Mul<&InverseCatalyticActivity<num_complex::Complex64>> for &num_complex::Complex64 {
1609	type Output = InverseCatalyticActivity<num_complex::Complex64>;
1610	fn mul(self, rhs: &InverseCatalyticActivity<num_complex::Complex64>) -> Self::Output {
1611		InverseCatalyticActivity{s_per_mol: self.clone() * rhs.s_per_mol.clone()}
1612	}
1613}
1614
1615
1616
1617
1618// InverseCatalyticActivity * Amount -> Time
1619/// Multiplying a InverseCatalyticActivity by a Amount returns a value of type Time
1620impl<T> core::ops::Mul<Amount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1621	type Output = Time<T>;
1622	fn mul(self, rhs: Amount<T>) -> Self::Output {
1623		Time{s: self.s_per_mol * rhs.mol}
1624	}
1625}
1626/// Multiplying a InverseCatalyticActivity by a Amount returns a value of type Time
1627impl<T> core::ops::Mul<Amount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1628	type Output = Time<T>;
1629	fn mul(self, rhs: Amount<T>) -> Self::Output {
1630		Time{s: self.s_per_mol.clone() * rhs.mol}
1631	}
1632}
1633/// Multiplying a InverseCatalyticActivity by a Amount returns a value of type Time
1634impl<T> core::ops::Mul<&Amount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1635	type Output = Time<T>;
1636	fn mul(self, rhs: &Amount<T>) -> Self::Output {
1637		Time{s: self.s_per_mol * rhs.mol.clone()}
1638	}
1639}
1640/// Multiplying a InverseCatalyticActivity by a Amount returns a value of type Time
1641impl<T> core::ops::Mul<&Amount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1642	type Output = Time<T>;
1643	fn mul(self, rhs: &Amount<T>) -> Self::Output {
1644		Time{s: self.s_per_mol.clone() * rhs.mol.clone()}
1645	}
1646}
1647
1648// InverseCatalyticActivity / InverseAmount -> Time
1649/// Dividing a InverseCatalyticActivity by a InverseAmount returns a value of type Time
1650impl<T> core::ops::Div<InverseAmount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1651	type Output = Time<T>;
1652	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
1653		Time{s: self.s_per_mol / rhs.per_mol}
1654	}
1655}
1656/// Dividing a InverseCatalyticActivity by a InverseAmount returns a value of type Time
1657impl<T> core::ops::Div<InverseAmount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1658	type Output = Time<T>;
1659	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
1660		Time{s: self.s_per_mol.clone() / rhs.per_mol}
1661	}
1662}
1663/// Dividing a InverseCatalyticActivity by a InverseAmount returns a value of type Time
1664impl<T> core::ops::Div<&InverseAmount<T>> for InverseCatalyticActivity<T> where T: NumLike {
1665	type Output = Time<T>;
1666	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
1667		Time{s: self.s_per_mol / rhs.per_mol.clone()}
1668	}
1669}
1670/// Dividing a InverseCatalyticActivity by a InverseAmount returns a value of type Time
1671impl<T> core::ops::Div<&InverseAmount<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1672	type Output = Time<T>;
1673	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
1674		Time{s: self.s_per_mol.clone() / rhs.per_mol.clone()}
1675	}
1676}
1677
1678// InverseCatalyticActivity / Time -> InverseAmount
1679/// Dividing a InverseCatalyticActivity by a Time returns a value of type InverseAmount
1680impl<T> core::ops::Div<Time<T>> for InverseCatalyticActivity<T> where T: NumLike {
1681	type Output = InverseAmount<T>;
1682	fn div(self, rhs: Time<T>) -> Self::Output {
1683		InverseAmount{per_mol: self.s_per_mol / rhs.s}
1684	}
1685}
1686/// Dividing a InverseCatalyticActivity by a Time returns a value of type InverseAmount
1687impl<T> core::ops::Div<Time<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1688	type Output = InverseAmount<T>;
1689	fn div(self, rhs: Time<T>) -> Self::Output {
1690		InverseAmount{per_mol: self.s_per_mol.clone() / rhs.s}
1691	}
1692}
1693/// Dividing a InverseCatalyticActivity by a Time returns a value of type InverseAmount
1694impl<T> core::ops::Div<&Time<T>> for InverseCatalyticActivity<T> where T: NumLike {
1695	type Output = InverseAmount<T>;
1696	fn div(self, rhs: &Time<T>) -> Self::Output {
1697		InverseAmount{per_mol: self.s_per_mol / rhs.s.clone()}
1698	}
1699}
1700/// Dividing a InverseCatalyticActivity by a Time returns a value of type InverseAmount
1701impl<T> core::ops::Div<&Time<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1702	type Output = InverseAmount<T>;
1703	fn div(self, rhs: &Time<T>) -> Self::Output {
1704		InverseAmount{per_mol: self.s_per_mol.clone() / rhs.s.clone()}
1705	}
1706}
1707
1708// InverseCatalyticActivity * Frequency -> InverseAmount
1709/// Multiplying a InverseCatalyticActivity by a Frequency returns a value of type InverseAmount
1710impl<T> core::ops::Mul<Frequency<T>> for InverseCatalyticActivity<T> where T: NumLike {
1711	type Output = InverseAmount<T>;
1712	fn mul(self, rhs: Frequency<T>) -> Self::Output {
1713		InverseAmount{per_mol: self.s_per_mol * rhs.Hz}
1714	}
1715}
1716/// Multiplying a InverseCatalyticActivity by a Frequency returns a value of type InverseAmount
1717impl<T> core::ops::Mul<Frequency<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1718	type Output = InverseAmount<T>;
1719	fn mul(self, rhs: Frequency<T>) -> Self::Output {
1720		InverseAmount{per_mol: self.s_per_mol.clone() * rhs.Hz}
1721	}
1722}
1723/// Multiplying a InverseCatalyticActivity by a Frequency returns a value of type InverseAmount
1724impl<T> core::ops::Mul<&Frequency<T>> for InverseCatalyticActivity<T> where T: NumLike {
1725	type Output = InverseAmount<T>;
1726	fn mul(self, rhs: &Frequency<T>) -> Self::Output {
1727		InverseAmount{per_mol: self.s_per_mol * rhs.Hz.clone()}
1728	}
1729}
1730/// Multiplying a InverseCatalyticActivity by a Frequency returns a value of type InverseAmount
1731impl<T> core::ops::Mul<&Frequency<T>> for &InverseCatalyticActivity<T> where T: NumLike {
1732	type Output = InverseAmount<T>;
1733	fn mul(self, rhs: &Frequency<T>) -> Self::Output {
1734		InverseAmount{per_mol: self.s_per_mol.clone() * rhs.Hz.clone()}
1735	}
1736}
1737
1738// 1/InverseCatalyticActivity -> CatalyticActivity
1739/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1740impl<T> core::ops::Div<InverseCatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
1741	type Output = CatalyticActivity<T>;
1742	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1743		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1744	}
1745}
1746/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1747impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
1748	type Output = CatalyticActivity<T>;
1749	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1750		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1751	}
1752}
1753/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1754impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for f64 where T: NumLike+From<f64> {
1755	type Output = CatalyticActivity<T>;
1756	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1757		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1758	}
1759}
1760/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1761impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &f64 where T: NumLike+From<f64> {
1762	type Output = CatalyticActivity<T>;
1763	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1764		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1765	}
1766}
1767
1768// 1/InverseCatalyticActivity -> CatalyticActivity
1769/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1770impl<T> core::ops::Div<InverseCatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
1771	type Output = CatalyticActivity<T>;
1772	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1773		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1774	}
1775}
1776/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1777impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
1778	type Output = CatalyticActivity<T>;
1779	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1780		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1781	}
1782}
1783/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1784impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for f32 where T: NumLike+From<f32> {
1785	type Output = CatalyticActivity<T>;
1786	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1787		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1788	}
1789}
1790/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1791impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &f32 where T: NumLike+From<f32> {
1792	type Output = CatalyticActivity<T>;
1793	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1794		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1795	}
1796}
1797
1798// 1/InverseCatalyticActivity -> CatalyticActivity
1799/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1800impl<T> core::ops::Div<InverseCatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
1801	type Output = CatalyticActivity<T>;
1802	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1803		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1804	}
1805}
1806/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1807impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
1808	type Output = CatalyticActivity<T>;
1809	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1810		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1811	}
1812}
1813/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1814impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for i64 where T: NumLike+From<i64> {
1815	type Output = CatalyticActivity<T>;
1816	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1817		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1818	}
1819}
1820/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1821impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &i64 where T: NumLike+From<i64> {
1822	type Output = CatalyticActivity<T>;
1823	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1824		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1825	}
1826}
1827
1828// 1/InverseCatalyticActivity -> CatalyticActivity
1829/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1830impl<T> core::ops::Div<InverseCatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
1831	type Output = CatalyticActivity<T>;
1832	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1833		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1834	}
1835}
1836/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1837impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
1838	type Output = CatalyticActivity<T>;
1839	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1840		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1841	}
1842}
1843/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1844impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for i32 where T: NumLike+From<i32> {
1845	type Output = CatalyticActivity<T>;
1846	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1847		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1848	}
1849}
1850/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1851impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &i32 where T: NumLike+From<i32> {
1852	type Output = CatalyticActivity<T>;
1853	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1854		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1855	}
1856}
1857
1858// 1/InverseCatalyticActivity -> CatalyticActivity
1859/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1860#[cfg(feature="num-bigfloat")]
1861impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1862	type Output = CatalyticActivity<T>;
1863	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1864		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1865	}
1866}
1867/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1868#[cfg(feature="num-bigfloat")]
1869impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1870	type Output = CatalyticActivity<T>;
1871	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1872		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1873	}
1874}
1875/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1876#[cfg(feature="num-bigfloat")]
1877impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1878	type Output = CatalyticActivity<T>;
1879	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1880		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1881	}
1882}
1883/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1884#[cfg(feature="num-bigfloat")]
1885impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
1886	type Output = CatalyticActivity<T>;
1887	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1888		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1889	}
1890}
1891
1892// 1/InverseCatalyticActivity -> CatalyticActivity
1893/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1894#[cfg(feature="num-complex")]
1895impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1896	type Output = CatalyticActivity<T>;
1897	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1898		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1899	}
1900}
1901/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1902#[cfg(feature="num-complex")]
1903impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1904	type Output = CatalyticActivity<T>;
1905	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1906		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1907	}
1908}
1909/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1910#[cfg(feature="num-complex")]
1911impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1912	type Output = CatalyticActivity<T>;
1913	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1914		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1915	}
1916}
1917/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1918#[cfg(feature="num-complex")]
1919impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
1920	type Output = CatalyticActivity<T>;
1921	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1922		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1923	}
1924}
1925
1926// 1/InverseCatalyticActivity -> CatalyticActivity
1927/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1928#[cfg(feature="num-complex")]
1929impl<T> core::ops::Div<InverseCatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1930	type Output = CatalyticActivity<T>;
1931	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1932		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol}
1933	}
1934}
1935/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1936#[cfg(feature="num-complex")]
1937impl<T> core::ops::Div<InverseCatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1938	type Output = CatalyticActivity<T>;
1939	fn div(self, rhs: InverseCatalyticActivity<T>) -> Self::Output {
1940		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol}
1941	}
1942}
1943/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1944#[cfg(feature="num-complex")]
1945impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1946	type Output = CatalyticActivity<T>;
1947	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1948		CatalyticActivity{molps: T::from(self) / rhs.s_per_mol.clone()}
1949	}
1950}
1951/// Dividing a scalar value by a InverseCatalyticActivity unit value returns a value of type CatalyticActivity
1952#[cfg(feature="num-complex")]
1953impl<T> core::ops::Div<&InverseCatalyticActivity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
1954	type Output = CatalyticActivity<T>;
1955	fn div(self, rhs: &InverseCatalyticActivity<T>) -> Self::Output {
1956		CatalyticActivity{molps: T::from(self.clone()) / rhs.s_per_mol.clone()}
1957	}
1958}
1959
1960/// The inverse of specific heat capacity unit type, defined as kilogram per kelvin per joules in SI units
1961#[derive(UnitStruct, Debug, Clone)]
1962#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
1963pub struct InverseSpecificHeatCapacity<T: NumLike>{
1964	/// The value of this Inverse specific heat capacity in kilogram per kelvin per joules
1965	pub kgK_per_J: T
1966}
1967
1968impl<T> InverseSpecificHeatCapacity<T> where T: NumLike {
1969
1970	/// Returns the standard unit name of inverse specific heat capacity: "kilogram per kelvin per joules"
1971	pub fn unit_name() -> &'static str { "kilogram per kelvin per joules" }
1972	
1973	/// Returns the abbreviated name or symbol of inverse specific heat capacity: "kg·K/J" for kilogram per kelvin per joules
1974	pub fn unit_symbol() -> &'static str { "kg·K/J" }
1975	
1976	/// Returns a new inverse specific heat capacity value from the given number of kilograms kelvin per joules
1977	///
1978	/// # Arguments
1979	/// * `kilograms_kelvin_per_joule` - Any number-like type, representing a quantity of kilogram per kelvin per joules
1980	pub fn from_kilograms_kelvin_per_joule(kilograms_kelvin_per_joule: T) -> Self { InverseSpecificHeatCapacity{kgK_per_J: kilograms_kelvin_per_joule} }
1981	
1982	/// Returns a copy of this inverse specific heat capacity value in kilograms kelvin per joules
1983	pub fn to_kilograms_kelvin_per_joule(&self) -> T { self.kgK_per_J.clone() }
1984
1985	/// Returns a new inverse specific heat capacity value from the given number of kilograms kelvin per joules
1986	///
1987	/// # Arguments
1988	/// * `kgK_per_J` - Any number-like type, representing a quantity of kilogram per kelvin per joules
1989	pub fn from_kgK_per_J(kgK_per_J: T) -> Self { InverseSpecificHeatCapacity{kgK_per_J: kgK_per_J} }
1990	
1991	/// Returns a copy of this inverse specific heat capacity value in kilograms kelvin per joules
1992	pub fn to_kgK_per_J(&self) -> T { self.kgK_per_J.clone() }
1993
1994}
1995
1996impl<T> fmt::Display for InverseSpecificHeatCapacity<T> where T: NumLike {
1997	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1998		write!(f, "{} {}", &self.kgK_per_J, Self::unit_symbol())
1999	}
2000}
2001
2002impl<T> InverseSpecificHeatCapacity<T> where T: NumLike+From<f64> {
2003	
2004	/// Returns a copy of this inverse specific heat capacity value in grams kelvin per joules
2005	/// 
2006	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2007	pub fn to_grams_kelvin_per_joule(&self) -> T {
2008		return self.kgK_per_J.clone() * T::from(1000.0_f64);
2009	}
2010
2011	/// Returns a new inverse specific heat capacity value from the given number of grams kelvin per joules
2012	/// 
2013	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2014	///
2015	/// # Arguments
2016	/// * `grams_kelvin_per_joule` - Any number-like type, representing a quantity of grams kelvin per joules
2017	pub fn from_grams_kelvin_per_joule(grams_kelvin_per_joule: T) -> Self {
2018		InverseSpecificHeatCapacity{kgK_per_J: grams_kelvin_per_joule * T::from(0.001_f64)}
2019	}
2020
2021	/// Returns a copy of this inverse specific heat capacity value in grams kelvin per joules
2022	/// 
2023	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2024	pub fn to_gK_per_J(&self) -> T {
2025		return self.kgK_per_J.clone() * T::from(1000.0_f64);
2026	}
2027
2028	/// Returns a new inverse specific heat capacity value from the given number of grams kelvin per joules
2029	/// 
2030	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2031	///
2032	/// # Arguments
2033	/// * `gK_per_J` - Any number-like type, representing a quantity of grams kelvin per joules
2034	pub fn from_gK_per_J(gK_per_J: T) -> Self {
2035		InverseSpecificHeatCapacity{kgK_per_J: gK_per_J * T::from(0.001_f64)}
2036	}
2037
2038}
2039
2040
2041/// Multiplying a unit value by a scalar value returns a unit value
2042#[cfg(feature="num-bigfloat")]
2043impl core::ops::Mul<InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2044	type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2045	fn mul(self, rhs: InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2046		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2047	}
2048}
2049/// Multiplying a unit value by a scalar value returns a unit value
2050#[cfg(feature="num-bigfloat")]
2051impl core::ops::Mul<InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2052	type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2053	fn mul(self, rhs: InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2054		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2055	}
2056}
2057/// Multiplying a unit value by a scalar value returns a unit value
2058#[cfg(feature="num-bigfloat")]
2059impl core::ops::Mul<&InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2060	type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2061	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2062		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2063	}
2064}
2065/// Multiplying a unit value by a scalar value returns a unit value
2066#[cfg(feature="num-bigfloat")]
2067impl core::ops::Mul<&InverseSpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2068	type Output = InverseSpecificHeatCapacity<num_bigfloat::BigFloat>;
2069	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
2070		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2071	}
2072}
2073
2074/// Multiplying a unit value by a scalar value returns a unit value
2075#[cfg(feature="num-complex")]
2076impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
2077	type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2078	fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2079		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2080	}
2081}
2082/// Multiplying a unit value by a scalar value returns a unit value
2083#[cfg(feature="num-complex")]
2084impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
2085	type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2086	fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2087		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2088	}
2089}
2090/// Multiplying a unit value by a scalar value returns a unit value
2091#[cfg(feature="num-complex")]
2092impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
2093	type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2094	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2095		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2096	}
2097}
2098/// Multiplying a unit value by a scalar value returns a unit value
2099#[cfg(feature="num-complex")]
2100impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
2101	type Output = InverseSpecificHeatCapacity<num_complex::Complex32>;
2102	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
2103		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2104	}
2105}
2106
2107/// Multiplying a unit value by a scalar value returns a unit value
2108#[cfg(feature="num-complex")]
2109impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
2110	type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2111	fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2112		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J}
2113	}
2114}
2115/// Multiplying a unit value by a scalar value returns a unit value
2116#[cfg(feature="num-complex")]
2117impl core::ops::Mul<InverseSpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
2118	type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2119	fn mul(self, rhs: InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2120		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J}
2121	}
2122}
2123/// Multiplying a unit value by a scalar value returns a unit value
2124#[cfg(feature="num-complex")]
2125impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
2126	type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2127	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2128		InverseSpecificHeatCapacity{kgK_per_J: self * rhs.kgK_per_J.clone()}
2129	}
2130}
2131/// Multiplying a unit value by a scalar value returns a unit value
2132#[cfg(feature="num-complex")]
2133impl core::ops::Mul<&InverseSpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
2134	type Output = InverseSpecificHeatCapacity<num_complex::Complex64>;
2135	fn mul(self, rhs: &InverseSpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
2136		InverseSpecificHeatCapacity{kgK_per_J: self.clone() * rhs.kgK_per_J.clone()}
2137	}
2138}
2139
2140
2141
2142
2143// InverseSpecificHeatCapacity / InverseAbsorbedDose -> Temperature
2144/// Dividing a InverseSpecificHeatCapacity by a InverseAbsorbedDose returns a value of type Temperature
2145impl<T> core::ops::Div<InverseAbsorbedDose<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2146	type Output = Temperature<T>;
2147	fn div(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
2148		Temperature{K: self.kgK_per_J / rhs.per_Gy}
2149	}
2150}
2151/// Dividing a InverseSpecificHeatCapacity by a InverseAbsorbedDose returns a value of type Temperature
2152impl<T> core::ops::Div<InverseAbsorbedDose<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2153	type Output = Temperature<T>;
2154	fn div(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
2155		Temperature{K: self.kgK_per_J.clone() / rhs.per_Gy}
2156	}
2157}
2158/// Dividing a InverseSpecificHeatCapacity by a InverseAbsorbedDose returns a value of type Temperature
2159impl<T> core::ops::Div<&InverseAbsorbedDose<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2160	type Output = Temperature<T>;
2161	fn div(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
2162		Temperature{K: self.kgK_per_J / rhs.per_Gy.clone()}
2163	}
2164}
2165/// Dividing a InverseSpecificHeatCapacity by a InverseAbsorbedDose returns a value of type Temperature
2166impl<T> core::ops::Div<&InverseAbsorbedDose<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2167	type Output = Temperature<T>;
2168	fn div(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
2169		Temperature{K: self.kgK_per_J.clone() / rhs.per_Gy.clone()}
2170	}
2171}
2172
2173// InverseSpecificHeatCapacity / InverseDoseEquivalent -> Temperature
2174/// Dividing a InverseSpecificHeatCapacity by a InverseDoseEquivalent returns a value of type Temperature
2175impl<T> core::ops::Div<InverseDoseEquivalent<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2176	type Output = Temperature<T>;
2177	fn div(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
2178		Temperature{K: self.kgK_per_J / rhs.per_Sv}
2179	}
2180}
2181/// Dividing a InverseSpecificHeatCapacity by a InverseDoseEquivalent returns a value of type Temperature
2182impl<T> core::ops::Div<InverseDoseEquivalent<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2183	type Output = Temperature<T>;
2184	fn div(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
2185		Temperature{K: self.kgK_per_J.clone() / rhs.per_Sv}
2186	}
2187}
2188/// Dividing a InverseSpecificHeatCapacity by a InverseDoseEquivalent returns a value of type Temperature
2189impl<T> core::ops::Div<&InverseDoseEquivalent<T>> for InverseSpecificHeatCapacity<T> where T: NumLike {
2190	type Output = Temperature<T>;
2191	fn div(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
2192		Temperature{K: self.kgK_per_J / rhs.per_Sv.clone()}
2193	}
2194}
2195/// Dividing a InverseSpecificHeatCapacity by a InverseDoseEquivalent returns a value of type Temperature
2196impl<T> core::ops::Div<&InverseDoseEquivalent<T>> for &InverseSpecificHeatCapacity<T> where T: NumLike {
2197	type Output = Temperature<T>;
2198	fn div(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
2199		Temperature{K: self.kgK_per_J.clone() / rhs.per_Sv.clone()}
2200	}
2201}
2202
2203// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2204/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2205impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
2206	type Output = SpecificHeatCapacity<T>;
2207	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2208		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2209	}
2210}
2211/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2212impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
2213	type Output = SpecificHeatCapacity<T>;
2214	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2215		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2216	}
2217}
2218/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2219impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
2220	type Output = SpecificHeatCapacity<T>;
2221	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2222		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2223	}
2224}
2225/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2226impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
2227	type Output = SpecificHeatCapacity<T>;
2228	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2229		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2230	}
2231}
2232
2233// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2234/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2235impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
2236	type Output = SpecificHeatCapacity<T>;
2237	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2238		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2239	}
2240}
2241/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2242impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
2243	type Output = SpecificHeatCapacity<T>;
2244	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2245		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2246	}
2247}
2248/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2249impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
2250	type Output = SpecificHeatCapacity<T>;
2251	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2252		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2253	}
2254}
2255/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2256impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
2257	type Output = SpecificHeatCapacity<T>;
2258	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2259		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2260	}
2261}
2262
2263// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2264/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2265impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
2266	type Output = SpecificHeatCapacity<T>;
2267	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2268		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2269	}
2270}
2271/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2272impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
2273	type Output = SpecificHeatCapacity<T>;
2274	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2275		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2276	}
2277}
2278/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2279impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
2280	type Output = SpecificHeatCapacity<T>;
2281	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2282		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2283	}
2284}
2285/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2286impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
2287	type Output = SpecificHeatCapacity<T>;
2288	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2289		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2290	}
2291}
2292
2293// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2294/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2295impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
2296	type Output = SpecificHeatCapacity<T>;
2297	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2298		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2299	}
2300}
2301/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2302impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
2303	type Output = SpecificHeatCapacity<T>;
2304	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2305		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2306	}
2307}
2308/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2309impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
2310	type Output = SpecificHeatCapacity<T>;
2311	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2312		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2313	}
2314}
2315/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2316impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
2317	type Output = SpecificHeatCapacity<T>;
2318	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2319		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2320	}
2321}
2322
2323// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2324/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2325#[cfg(feature="num-bigfloat")]
2326impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2327	type Output = SpecificHeatCapacity<T>;
2328	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2329		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2330	}
2331}
2332/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2333#[cfg(feature="num-bigfloat")]
2334impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2335	type Output = SpecificHeatCapacity<T>;
2336	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2337		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2338	}
2339}
2340/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2341#[cfg(feature="num-bigfloat")]
2342impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2343	type Output = SpecificHeatCapacity<T>;
2344	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2345		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2346	}
2347}
2348/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2349#[cfg(feature="num-bigfloat")]
2350impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
2351	type Output = SpecificHeatCapacity<T>;
2352	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2353		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2354	}
2355}
2356
2357// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2358/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2359#[cfg(feature="num-complex")]
2360impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2361	type Output = SpecificHeatCapacity<T>;
2362	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2363		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2364	}
2365}
2366/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2367#[cfg(feature="num-complex")]
2368impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2369	type Output = SpecificHeatCapacity<T>;
2370	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2371		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2372	}
2373}
2374/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2375#[cfg(feature="num-complex")]
2376impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2377	type Output = SpecificHeatCapacity<T>;
2378	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2379		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2380	}
2381}
2382/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2383#[cfg(feature="num-complex")]
2384impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
2385	type Output = SpecificHeatCapacity<T>;
2386	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2387		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2388	}
2389}
2390
2391// 1/InverseSpecificHeatCapacity -> SpecificHeatCapacity
2392/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2393#[cfg(feature="num-complex")]
2394impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2395	type Output = SpecificHeatCapacity<T>;
2396	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2397		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J}
2398	}
2399}
2400/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2401#[cfg(feature="num-complex")]
2402impl<T> core::ops::Div<InverseSpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2403	type Output = SpecificHeatCapacity<T>;
2404	fn div(self, rhs: InverseSpecificHeatCapacity<T>) -> Self::Output {
2405		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J}
2406	}
2407}
2408/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2409#[cfg(feature="num-complex")]
2410impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2411	type Output = SpecificHeatCapacity<T>;
2412	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2413		SpecificHeatCapacity{J_per_kgK: T::from(self) / rhs.kgK_per_J.clone()}
2414	}
2415}
2416/// Dividing a scalar value by a InverseSpecificHeatCapacity unit value returns a value of type SpecificHeatCapacity
2417#[cfg(feature="num-complex")]
2418impl<T> core::ops::Div<&InverseSpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
2419	type Output = SpecificHeatCapacity<T>;
2420	fn div(self, rhs: &InverseSpecificHeatCapacity<T>) -> Self::Output {
2421		SpecificHeatCapacity{J_per_kgK: T::from(self.clone()) / rhs.kgK_per_J.clone()}
2422	}
2423}
2424
2425/// The molality unit type, defined as moles per kilogram in SI units
2426#[derive(UnitStruct, Debug, Clone)]
2427#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
2428pub struct Molality<T: NumLike>{
2429	/// The value of this Molality in moles per kilogram
2430	pub molpkg: T
2431}
2432
2433impl<T> Molality<T> where T: NumLike {
2434
2435	/// Returns the standard unit name of molality: "moles per kilogram"
2436	pub fn unit_name() -> &'static str { "moles per kilogram" }
2437	
2438	/// Returns the abbreviated name or symbol of molality: "mol/kg" for moles per kilogram
2439	pub fn unit_symbol() -> &'static str { "mol/kg" }
2440	
2441	/// Returns a new molality value from the given number of moles per kilogram
2442	///
2443	/// # Arguments
2444	/// * `molpkg` - Any number-like type, representing a quantity of moles per kilogram
2445	pub fn from_molpkg(molpkg: T) -> Self { Molality{molpkg: molpkg} }
2446	
2447	/// Returns a copy of this molality value in moles per kilogram
2448	pub fn to_molpkg(&self) -> T { self.molpkg.clone() }
2449
2450	/// Returns a new molality value from the given number of moles per kilogram
2451	///
2452	/// # Arguments
2453	/// * `moles_per_kilogram` - Any number-like type, representing a quantity of moles per kilogram
2454	pub fn from_moles_per_kilogram(moles_per_kilogram: T) -> Self { Molality{molpkg: moles_per_kilogram} }
2455	
2456	/// Returns a copy of this molality value in moles per kilogram
2457	pub fn to_moles_per_kilogram(&self) -> T { self.molpkg.clone() }
2458
2459	/// Returns a new molality value from the given number of millimoles per gram
2460	///
2461	/// # Arguments
2462	/// * `mmolpg` - Any number-like type, representing a quantity of moles per kilogram
2463	pub fn from_mmolpg(mmolpg: T) -> Self { Molality{molpkg: mmolpg} }
2464	
2465	/// Returns a copy of this molality value in millimoles per gram
2466	pub fn to_mmolpg(&self) -> T { self.molpkg.clone() }
2467
2468}
2469
2470impl<T> fmt::Display for Molality<T> where T: NumLike {
2471	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2472		write!(f, "{} {}", &self.molpkg, Self::unit_symbol())
2473	}
2474}
2475
2476impl<T> Molality<T> where T: NumLike+From<f64> {
2477	
2478	/// Returns a copy of this molality value in millimoles per kilogram
2479	/// 
2480	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2481	pub fn to_mmolpkg(&self) -> T {
2482		return self.molpkg.clone() * T::from(1000.0_f64);
2483	}
2484
2485	/// Returns a new molality value from the given number of millimoles per kilogram
2486	/// 
2487	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2488	///
2489	/// # Arguments
2490	/// * `mmolpkg` - Any number-like type, representing a quantity of millimoles per kilogram
2491	pub fn from_mmolpkg(mmolpkg: T) -> Self {
2492		Molality{molpkg: mmolpkg * T::from(0.001_f64)}
2493	}
2494
2495	/// Returns a copy of this molality value in micromoles per kilogram
2496	/// 
2497	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2498	pub fn to_umolpkg(&self) -> T {
2499		return self.molpkg.clone() * T::from(1000000.0_f64);
2500	}
2501
2502	/// Returns a new molality value from the given number of micromoles per kilogram
2503	/// 
2504	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2505	///
2506	/// # Arguments
2507	/// * `umolpkg` - Any number-like type, representing a quantity of micromoles per kilogram
2508	pub fn from_umolpkg(umolpkg: T) -> Self {
2509		Molality{molpkg: umolpkg * T::from(1e-06_f64)}
2510	}
2511
2512	/// Returns a copy of this molality value in nanomoles per kilogram
2513	/// 
2514	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2515	pub fn to_nmolpkg(&self) -> T {
2516		return self.molpkg.clone() * T::from(1000000000.0_f64);
2517	}
2518
2519	/// Returns a new molality value from the given number of nanomoles per kilogram
2520	/// 
2521	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2522	///
2523	/// # Arguments
2524	/// * `nmolpkg` - Any number-like type, representing a quantity of nanomoles per kilogram
2525	pub fn from_nmolpkg(nmolpkg: T) -> Self {
2526		Molality{molpkg: nmolpkg * T::from(1e-09_f64)}
2527	}
2528
2529	/// Returns a copy of this molality value in micromoles per gram
2530	/// 
2531	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2532	pub fn to_umolpg(&self) -> T {
2533		return self.molpkg.clone() * T::from(1000.0_f64);
2534	}
2535
2536	/// Returns a new molality value from the given number of micromoles per gram
2537	/// 
2538	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2539	///
2540	/// # Arguments
2541	/// * `umolpg` - Any number-like type, representing a quantity of micromoles per gram
2542	pub fn from_umolpg(umolpg: T) -> Self {
2543		Molality{molpkg: umolpg * T::from(0.001_f64)}
2544	}
2545
2546	/// Returns a copy of this molality value in nanomoles per gram
2547	/// 
2548	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2549	pub fn to_nmolpg(&self) -> T {
2550		return self.molpkg.clone() * T::from(1000000.0_f64);
2551	}
2552
2553	/// Returns a new molality value from the given number of nanomoles per gram
2554	/// 
2555	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
2556	///
2557	/// # Arguments
2558	/// * `nmolpg` - Any number-like type, representing a quantity of nanomoles per gram
2559	pub fn from_nmolpg(nmolpg: T) -> Self {
2560		Molality{molpkg: nmolpg * T::from(1e-06_f64)}
2561	}
2562
2563}
2564
2565
2566/// Multiplying a unit value by a scalar value returns a unit value
2567#[cfg(feature="num-bigfloat")]
2568impl core::ops::Mul<Molality<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2569	type Output = Molality<num_bigfloat::BigFloat>;
2570	fn mul(self, rhs: Molality<num_bigfloat::BigFloat>) -> Self::Output {
2571		Molality{molpkg: self * rhs.molpkg}
2572	}
2573}
2574/// Multiplying a unit value by a scalar value returns a unit value
2575#[cfg(feature="num-bigfloat")]
2576impl core::ops::Mul<Molality<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2577	type Output = Molality<num_bigfloat::BigFloat>;
2578	fn mul(self, rhs: Molality<num_bigfloat::BigFloat>) -> Self::Output {
2579		Molality{molpkg: self.clone() * rhs.molpkg}
2580	}
2581}
2582/// Multiplying a unit value by a scalar value returns a unit value
2583#[cfg(feature="num-bigfloat")]
2584impl core::ops::Mul<&Molality<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
2585	type Output = Molality<num_bigfloat::BigFloat>;
2586	fn mul(self, rhs: &Molality<num_bigfloat::BigFloat>) -> Self::Output {
2587		Molality{molpkg: self * rhs.molpkg.clone()}
2588	}
2589}
2590/// Multiplying a unit value by a scalar value returns a unit value
2591#[cfg(feature="num-bigfloat")]
2592impl core::ops::Mul<&Molality<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
2593	type Output = Molality<num_bigfloat::BigFloat>;
2594	fn mul(self, rhs: &Molality<num_bigfloat::BigFloat>) -> Self::Output {
2595		Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2596	}
2597}
2598
2599/// Multiplying a unit value by a scalar value returns a unit value
2600#[cfg(feature="num-complex")]
2601impl core::ops::Mul<Molality<num_complex::Complex32>> for num_complex::Complex32 {
2602	type Output = Molality<num_complex::Complex32>;
2603	fn mul(self, rhs: Molality<num_complex::Complex32>) -> Self::Output {
2604		Molality{molpkg: self * rhs.molpkg}
2605	}
2606}
2607/// Multiplying a unit value by a scalar value returns a unit value
2608#[cfg(feature="num-complex")]
2609impl core::ops::Mul<Molality<num_complex::Complex32>> for &num_complex::Complex32 {
2610	type Output = Molality<num_complex::Complex32>;
2611	fn mul(self, rhs: Molality<num_complex::Complex32>) -> Self::Output {
2612		Molality{molpkg: self.clone() * rhs.molpkg}
2613	}
2614}
2615/// Multiplying a unit value by a scalar value returns a unit value
2616#[cfg(feature="num-complex")]
2617impl core::ops::Mul<&Molality<num_complex::Complex32>> for num_complex::Complex32 {
2618	type Output = Molality<num_complex::Complex32>;
2619	fn mul(self, rhs: &Molality<num_complex::Complex32>) -> Self::Output {
2620		Molality{molpkg: self * rhs.molpkg.clone()}
2621	}
2622}
2623/// Multiplying a unit value by a scalar value returns a unit value
2624#[cfg(feature="num-complex")]
2625impl core::ops::Mul<&Molality<num_complex::Complex32>> for &num_complex::Complex32 {
2626	type Output = Molality<num_complex::Complex32>;
2627	fn mul(self, rhs: &Molality<num_complex::Complex32>) -> Self::Output {
2628		Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2629	}
2630}
2631
2632/// Multiplying a unit value by a scalar value returns a unit value
2633#[cfg(feature="num-complex")]
2634impl core::ops::Mul<Molality<num_complex::Complex64>> for num_complex::Complex64 {
2635	type Output = Molality<num_complex::Complex64>;
2636	fn mul(self, rhs: Molality<num_complex::Complex64>) -> Self::Output {
2637		Molality{molpkg: self * rhs.molpkg}
2638	}
2639}
2640/// Multiplying a unit value by a scalar value returns a unit value
2641#[cfg(feature="num-complex")]
2642impl core::ops::Mul<Molality<num_complex::Complex64>> for &num_complex::Complex64 {
2643	type Output = Molality<num_complex::Complex64>;
2644	fn mul(self, rhs: Molality<num_complex::Complex64>) -> Self::Output {
2645		Molality{molpkg: self.clone() * rhs.molpkg}
2646	}
2647}
2648/// Multiplying a unit value by a scalar value returns a unit value
2649#[cfg(feature="num-complex")]
2650impl core::ops::Mul<&Molality<num_complex::Complex64>> for num_complex::Complex64 {
2651	type Output = Molality<num_complex::Complex64>;
2652	fn mul(self, rhs: &Molality<num_complex::Complex64>) -> Self::Output {
2653		Molality{molpkg: self * rhs.molpkg.clone()}
2654	}
2655}
2656/// Multiplying a unit value by a scalar value returns a unit value
2657#[cfg(feature="num-complex")]
2658impl core::ops::Mul<&Molality<num_complex::Complex64>> for &num_complex::Complex64 {
2659	type Output = Molality<num_complex::Complex64>;
2660	fn mul(self, rhs: &Molality<num_complex::Complex64>) -> Self::Output {
2661		Molality{molpkg: self.clone() * rhs.molpkg.clone()}
2662	}
2663}
2664
2665
2666
2667/// Converts a Molality into the equivalent [uom](https://crates.io/crates/uom) type [Molality](https://docs.rs/uom/0.34.0/uom/si/f32/type.Molality.html)
2668#[cfg(feature = "uom")]
2669impl<T> Into<uom::si::f32::Molality> for Molality<T> where T: NumLike+Into<f32> {
2670	fn into(self) -> uom::si::f32::Molality {
2671		uom::si::f32::Molality::new::<uom::si::molality::mole_per_kilogram>(self.molpkg.into())
2672	}
2673}
2674
2675/// Creates a Molality from the equivalent [uom](https://crates.io/crates/uom) type [Molality](https://docs.rs/uom/0.34.0/uom/si/f32/type.Molality.html)
2676#[cfg(feature = "uom")]
2677impl<T> From<uom::si::f32::Molality> for Molality<T> where T: NumLike+From<f32> {
2678	fn from(src: uom::si::f32::Molality) -> Self {
2679		Molality{molpkg: T::from(src.value)}
2680	}
2681}
2682
2683/// Converts a Molality into the equivalent [uom](https://crates.io/crates/uom) type [Molality](https://docs.rs/uom/0.34.0/uom/si/f64/type.Molality.html)
2684#[cfg(feature = "uom")]
2685impl<T> Into<uom::si::f64::Molality> for Molality<T> where T: NumLike+Into<f64> {
2686	fn into(self) -> uom::si::f64::Molality {
2687		uom::si::f64::Molality::new::<uom::si::molality::mole_per_kilogram>(self.molpkg.into())
2688	}
2689}
2690
2691/// Creates a Molality from the equivalent [uom](https://crates.io/crates/uom) type [Molality](https://docs.rs/uom/0.34.0/uom/si/f64/type.Molality.html)
2692#[cfg(feature = "uom")]
2693impl<T> From<uom::si::f64::Molality> for Molality<T> where T: NumLike+From<f64> {
2694	fn from(src: uom::si::f64::Molality) -> Self {
2695		Molality{molpkg: T::from(src.value)}
2696	}
2697}
2698
2699
2700// Molality / Amount -> InverseMass
2701/// Dividing a Molality by a Amount returns a value of type InverseMass
2702impl<T> core::ops::Div<Amount<T>> for Molality<T> where T: NumLike {
2703	type Output = InverseMass<T>;
2704	fn div(self, rhs: Amount<T>) -> Self::Output {
2705		InverseMass{per_kg: self.molpkg / rhs.mol}
2706	}
2707}
2708/// Dividing a Molality by a Amount returns a value of type InverseMass
2709impl<T> core::ops::Div<Amount<T>> for &Molality<T> where T: NumLike {
2710	type Output = InverseMass<T>;
2711	fn div(self, rhs: Amount<T>) -> Self::Output {
2712		InverseMass{per_kg: self.molpkg.clone() / rhs.mol}
2713	}
2714}
2715/// Dividing a Molality by a Amount returns a value of type InverseMass
2716impl<T> core::ops::Div<&Amount<T>> for Molality<T> where T: NumLike {
2717	type Output = InverseMass<T>;
2718	fn div(self, rhs: &Amount<T>) -> Self::Output {
2719		InverseMass{per_kg: self.molpkg / rhs.mol.clone()}
2720	}
2721}
2722/// Dividing a Molality by a Amount returns a value of type InverseMass
2723impl<T> core::ops::Div<&Amount<T>> for &Molality<T> where T: NumLike {
2724	type Output = InverseMass<T>;
2725	fn div(self, rhs: &Amount<T>) -> Self::Output {
2726		InverseMass{per_kg: self.molpkg.clone() / rhs.mol.clone()}
2727	}
2728}
2729
2730// Molality * InverseAmount -> InverseMass
2731/// Multiplying a Molality by a InverseAmount returns a value of type InverseMass
2732impl<T> core::ops::Mul<InverseAmount<T>> for Molality<T> where T: NumLike {
2733	type Output = InverseMass<T>;
2734	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
2735		InverseMass{per_kg: self.molpkg * rhs.per_mol}
2736	}
2737}
2738/// Multiplying a Molality by a InverseAmount returns a value of type InverseMass
2739impl<T> core::ops::Mul<InverseAmount<T>> for &Molality<T> where T: NumLike {
2740	type Output = InverseMass<T>;
2741	fn mul(self, rhs: InverseAmount<T>) -> Self::Output {
2742		InverseMass{per_kg: self.molpkg.clone() * rhs.per_mol}
2743	}
2744}
2745/// Multiplying a Molality by a InverseAmount returns a value of type InverseMass
2746impl<T> core::ops::Mul<&InverseAmount<T>> for Molality<T> where T: NumLike {
2747	type Output = InverseMass<T>;
2748	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
2749		InverseMass{per_kg: self.molpkg * rhs.per_mol.clone()}
2750	}
2751}
2752/// Multiplying a Molality by a InverseAmount returns a value of type InverseMass
2753impl<T> core::ops::Mul<&InverseAmount<T>> for &Molality<T> where T: NumLike {
2754	type Output = InverseMass<T>;
2755	fn mul(self, rhs: &InverseAmount<T>) -> Self::Output {
2756		InverseMass{per_kg: self.molpkg.clone() * rhs.per_mol.clone()}
2757	}
2758}
2759
2760// Molality / InverseMass -> Amount
2761/// Dividing a Molality by a InverseMass returns a value of type Amount
2762impl<T> core::ops::Div<InverseMass<T>> for Molality<T> where T: NumLike {
2763	type Output = Amount<T>;
2764	fn div(self, rhs: InverseMass<T>) -> Self::Output {
2765		Amount{mol: self.molpkg / rhs.per_kg}
2766	}
2767}
2768/// Dividing a Molality by a InverseMass returns a value of type Amount
2769impl<T> core::ops::Div<InverseMass<T>> for &Molality<T> where T: NumLike {
2770	type Output = Amount<T>;
2771	fn div(self, rhs: InverseMass<T>) -> Self::Output {
2772		Amount{mol: self.molpkg.clone() / rhs.per_kg}
2773	}
2774}
2775/// Dividing a Molality by a InverseMass returns a value of type Amount
2776impl<T> core::ops::Div<&InverseMass<T>> for Molality<T> where T: NumLike {
2777	type Output = Amount<T>;
2778	fn div(self, rhs: &InverseMass<T>) -> Self::Output {
2779		Amount{mol: self.molpkg / rhs.per_kg.clone()}
2780	}
2781}
2782/// Dividing a Molality by a InverseMass returns a value of type Amount
2783impl<T> core::ops::Div<&InverseMass<T>> for &Molality<T> where T: NumLike {
2784	type Output = Amount<T>;
2785	fn div(self, rhs: &InverseMass<T>) -> Self::Output {
2786		Amount{mol: self.molpkg.clone() / rhs.per_kg.clone()}
2787	}
2788}
2789
2790// Molality * Mass -> Amount
2791/// Multiplying a Molality by a Mass returns a value of type Amount
2792impl<T> core::ops::Mul<Mass<T>> for Molality<T> where T: NumLike {
2793	type Output = Amount<T>;
2794	fn mul(self, rhs: Mass<T>) -> Self::Output {
2795		Amount{mol: self.molpkg * rhs.kg}
2796	}
2797}
2798/// Multiplying a Molality by a Mass returns a value of type Amount
2799impl<T> core::ops::Mul<Mass<T>> for &Molality<T> where T: NumLike {
2800	type Output = Amount<T>;
2801	fn mul(self, rhs: Mass<T>) -> Self::Output {
2802		Amount{mol: self.molpkg.clone() * rhs.kg}
2803	}
2804}
2805/// Multiplying a Molality by a Mass returns a value of type Amount
2806impl<T> core::ops::Mul<&Mass<T>> for Molality<T> where T: NumLike {
2807	type Output = Amount<T>;
2808	fn mul(self, rhs: &Mass<T>) -> Self::Output {
2809		Amount{mol: self.molpkg * rhs.kg.clone()}
2810	}
2811}
2812/// Multiplying a Molality by a Mass returns a value of type Amount
2813impl<T> core::ops::Mul<&Mass<T>> for &Molality<T> where T: NumLike {
2814	type Output = Amount<T>;
2815	fn mul(self, rhs: &Mass<T>) -> Self::Output {
2816		Amount{mol: self.molpkg.clone() * rhs.kg.clone()}
2817	}
2818}
2819
2820// Molality / Concentration -> VolumePerMass
2821/// Dividing a Molality by a Concentration returns a value of type VolumePerMass
2822impl<T> core::ops::Div<Concentration<T>> for Molality<T> where T: NumLike {
2823	type Output = VolumePerMass<T>;
2824	fn div(self, rhs: Concentration<T>) -> Self::Output {
2825		VolumePerMass{m3_per_kg: self.molpkg / rhs.molpm3}
2826	}
2827}
2828/// Dividing a Molality by a Concentration returns a value of type VolumePerMass
2829impl<T> core::ops::Div<Concentration<T>> for &Molality<T> where T: NumLike {
2830	type Output = VolumePerMass<T>;
2831	fn div(self, rhs: Concentration<T>) -> Self::Output {
2832		VolumePerMass{m3_per_kg: self.molpkg.clone() / rhs.molpm3}
2833	}
2834}
2835/// Dividing a Molality by a Concentration returns a value of type VolumePerMass
2836impl<T> core::ops::Div<&Concentration<T>> for Molality<T> where T: NumLike {
2837	type Output = VolumePerMass<T>;
2838	fn div(self, rhs: &Concentration<T>) -> Self::Output {
2839		VolumePerMass{m3_per_kg: self.molpkg / rhs.molpm3.clone()}
2840	}
2841}
2842/// Dividing a Molality by a Concentration returns a value of type VolumePerMass
2843impl<T> core::ops::Div<&Concentration<T>> for &Molality<T> where T: NumLike {
2844	type Output = VolumePerMass<T>;
2845	fn div(self, rhs: &Concentration<T>) -> Self::Output {
2846		VolumePerMass{m3_per_kg: self.molpkg.clone() / rhs.molpm3.clone()}
2847	}
2848}
2849
2850// Molality * MolarVolume -> VolumePerMass
2851/// Multiplying a Molality by a MolarVolume returns a value of type VolumePerMass
2852impl<T> core::ops::Mul<MolarVolume<T>> for Molality<T> where T: NumLike {
2853	type Output = VolumePerMass<T>;
2854	fn mul(self, rhs: MolarVolume<T>) -> Self::Output {
2855		VolumePerMass{m3_per_kg: self.molpkg * rhs.m3_per_mol}
2856	}
2857}
2858/// Multiplying a Molality by a MolarVolume returns a value of type VolumePerMass
2859impl<T> core::ops::Mul<MolarVolume<T>> for &Molality<T> where T: NumLike {
2860	type Output = VolumePerMass<T>;
2861	fn mul(self, rhs: MolarVolume<T>) -> Self::Output {
2862		VolumePerMass{m3_per_kg: self.molpkg.clone() * rhs.m3_per_mol}
2863	}
2864}
2865/// Multiplying a Molality by a MolarVolume returns a value of type VolumePerMass
2866impl<T> core::ops::Mul<&MolarVolume<T>> for Molality<T> where T: NumLike {
2867	type Output = VolumePerMass<T>;
2868	fn mul(self, rhs: &MolarVolume<T>) -> Self::Output {
2869		VolumePerMass{m3_per_kg: self.molpkg * rhs.m3_per_mol.clone()}
2870	}
2871}
2872/// Multiplying a Molality by a MolarVolume returns a value of type VolumePerMass
2873impl<T> core::ops::Mul<&MolarVolume<T>> for &Molality<T> where T: NumLike {
2874	type Output = VolumePerMass<T>;
2875	fn mul(self, rhs: &MolarVolume<T>) -> Self::Output {
2876		VolumePerMass{m3_per_kg: self.molpkg.clone() * rhs.m3_per_mol.clone()}
2877	}
2878}
2879
2880// Molality * Density -> Concentration
2881/// Multiplying a Molality by a Density returns a value of type Concentration
2882impl<T> core::ops::Mul<Density<T>> for Molality<T> where T: NumLike {
2883	type Output = Concentration<T>;
2884	fn mul(self, rhs: Density<T>) -> Self::Output {
2885		Concentration{molpm3: self.molpkg * rhs.kgpm3}
2886	}
2887}
2888/// Multiplying a Molality by a Density returns a value of type Concentration
2889impl<T> core::ops::Mul<Density<T>> for &Molality<T> where T: NumLike {
2890	type Output = Concentration<T>;
2891	fn mul(self, rhs: Density<T>) -> Self::Output {
2892		Concentration{molpm3: self.molpkg.clone() * rhs.kgpm3}
2893	}
2894}
2895/// Multiplying a Molality by a Density returns a value of type Concentration
2896impl<T> core::ops::Mul<&Density<T>> for Molality<T> where T: NumLike {
2897	type Output = Concentration<T>;
2898	fn mul(self, rhs: &Density<T>) -> Self::Output {
2899		Concentration{molpm3: self.molpkg * rhs.kgpm3.clone()}
2900	}
2901}
2902/// Multiplying a Molality by a Density returns a value of type Concentration
2903impl<T> core::ops::Mul<&Density<T>> for &Molality<T> where T: NumLike {
2904	type Output = Concentration<T>;
2905	fn mul(self, rhs: &Density<T>) -> Self::Output {
2906		Concentration{molpm3: self.molpkg.clone() * rhs.kgpm3.clone()}
2907	}
2908}
2909
2910// Molality / VolumePerMass -> Concentration
2911/// Dividing a Molality by a VolumePerMass returns a value of type Concentration
2912impl<T> core::ops::Div<VolumePerMass<T>> for Molality<T> where T: NumLike {
2913	type Output = Concentration<T>;
2914	fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
2915		Concentration{molpm3: self.molpkg / rhs.m3_per_kg}
2916	}
2917}
2918/// Dividing a Molality by a VolumePerMass returns a value of type Concentration
2919impl<T> core::ops::Div<VolumePerMass<T>> for &Molality<T> where T: NumLike {
2920	type Output = Concentration<T>;
2921	fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
2922		Concentration{molpm3: self.molpkg.clone() / rhs.m3_per_kg}
2923	}
2924}
2925/// Dividing a Molality by a VolumePerMass returns a value of type Concentration
2926impl<T> core::ops::Div<&VolumePerMass<T>> for Molality<T> where T: NumLike {
2927	type Output = Concentration<T>;
2928	fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
2929		Concentration{molpm3: self.molpkg / rhs.m3_per_kg.clone()}
2930	}
2931}
2932/// Dividing a Molality by a VolumePerMass returns a value of type Concentration
2933impl<T> core::ops::Div<&VolumePerMass<T>> for &Molality<T> where T: NumLike {
2934	type Output = Concentration<T>;
2935	fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
2936		Concentration{molpm3: self.molpkg.clone() / rhs.m3_per_kg.clone()}
2937	}
2938}
2939
2940// 1/Molality -> MolarMass
2941/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2942impl<T> core::ops::Div<Molality<T>> for f64 where T: NumLike+From<f64> {
2943	type Output = MolarMass<T>;
2944	fn div(self, rhs: Molality<T>) -> Self::Output {
2945		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
2946	}
2947}
2948/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2949impl<T> core::ops::Div<Molality<T>> for &f64 where T: NumLike+From<f64> {
2950	type Output = MolarMass<T>;
2951	fn div(self, rhs: Molality<T>) -> Self::Output {
2952		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
2953	}
2954}
2955/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2956impl<T> core::ops::Div<&Molality<T>> for f64 where T: NumLike+From<f64> {
2957	type Output = MolarMass<T>;
2958	fn div(self, rhs: &Molality<T>) -> Self::Output {
2959		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
2960	}
2961}
2962/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2963impl<T> core::ops::Div<&Molality<T>> for &f64 where T: NumLike+From<f64> {
2964	type Output = MolarMass<T>;
2965	fn div(self, rhs: &Molality<T>) -> Self::Output {
2966		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
2967	}
2968}
2969
2970// 1/Molality -> MolarMass
2971/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2972impl<T> core::ops::Div<Molality<T>> for f32 where T: NumLike+From<f32> {
2973	type Output = MolarMass<T>;
2974	fn div(self, rhs: Molality<T>) -> Self::Output {
2975		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
2976	}
2977}
2978/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2979impl<T> core::ops::Div<Molality<T>> for &f32 where T: NumLike+From<f32> {
2980	type Output = MolarMass<T>;
2981	fn div(self, rhs: Molality<T>) -> Self::Output {
2982		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
2983	}
2984}
2985/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2986impl<T> core::ops::Div<&Molality<T>> for f32 where T: NumLike+From<f32> {
2987	type Output = MolarMass<T>;
2988	fn div(self, rhs: &Molality<T>) -> Self::Output {
2989		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
2990	}
2991}
2992/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
2993impl<T> core::ops::Div<&Molality<T>> for &f32 where T: NumLike+From<f32> {
2994	type Output = MolarMass<T>;
2995	fn div(self, rhs: &Molality<T>) -> Self::Output {
2996		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
2997	}
2998}
2999
3000// 1/Molality -> MolarMass
3001/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3002impl<T> core::ops::Div<Molality<T>> for i64 where T: NumLike+From<i64> {
3003	type Output = MolarMass<T>;
3004	fn div(self, rhs: Molality<T>) -> Self::Output {
3005		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3006	}
3007}
3008/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3009impl<T> core::ops::Div<Molality<T>> for &i64 where T: NumLike+From<i64> {
3010	type Output = MolarMass<T>;
3011	fn div(self, rhs: Molality<T>) -> Self::Output {
3012		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3013	}
3014}
3015/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3016impl<T> core::ops::Div<&Molality<T>> for i64 where T: NumLike+From<i64> {
3017	type Output = MolarMass<T>;
3018	fn div(self, rhs: &Molality<T>) -> Self::Output {
3019		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3020	}
3021}
3022/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3023impl<T> core::ops::Div<&Molality<T>> for &i64 where T: NumLike+From<i64> {
3024	type Output = MolarMass<T>;
3025	fn div(self, rhs: &Molality<T>) -> Self::Output {
3026		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3027	}
3028}
3029
3030// 1/Molality -> MolarMass
3031/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3032impl<T> core::ops::Div<Molality<T>> for i32 where T: NumLike+From<i32> {
3033	type Output = MolarMass<T>;
3034	fn div(self, rhs: Molality<T>) -> Self::Output {
3035		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3036	}
3037}
3038/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3039impl<T> core::ops::Div<Molality<T>> for &i32 where T: NumLike+From<i32> {
3040	type Output = MolarMass<T>;
3041	fn div(self, rhs: Molality<T>) -> Self::Output {
3042		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3043	}
3044}
3045/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3046impl<T> core::ops::Div<&Molality<T>> for i32 where T: NumLike+From<i32> {
3047	type Output = MolarMass<T>;
3048	fn div(self, rhs: &Molality<T>) -> Self::Output {
3049		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3050	}
3051}
3052/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3053impl<T> core::ops::Div<&Molality<T>> for &i32 where T: NumLike+From<i32> {
3054	type Output = MolarMass<T>;
3055	fn div(self, rhs: &Molality<T>) -> Self::Output {
3056		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3057	}
3058}
3059
3060// 1/Molality -> MolarMass
3061/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3062#[cfg(feature="num-bigfloat")]
3063impl<T> core::ops::Div<Molality<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3064	type Output = MolarMass<T>;
3065	fn div(self, rhs: Molality<T>) -> Self::Output {
3066		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3067	}
3068}
3069/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3070#[cfg(feature="num-bigfloat")]
3071impl<T> core::ops::Div<Molality<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3072	type Output = MolarMass<T>;
3073	fn div(self, rhs: Molality<T>) -> Self::Output {
3074		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3075	}
3076}
3077/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3078#[cfg(feature="num-bigfloat")]
3079impl<T> core::ops::Div<&Molality<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3080	type Output = MolarMass<T>;
3081	fn div(self, rhs: &Molality<T>) -> Self::Output {
3082		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3083	}
3084}
3085/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3086#[cfg(feature="num-bigfloat")]
3087impl<T> core::ops::Div<&Molality<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3088	type Output = MolarMass<T>;
3089	fn div(self, rhs: &Molality<T>) -> Self::Output {
3090		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3091	}
3092}
3093
3094// 1/Molality -> MolarMass
3095/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3096#[cfg(feature="num-complex")]
3097impl<T> core::ops::Div<Molality<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3098	type Output = MolarMass<T>;
3099	fn div(self, rhs: Molality<T>) -> Self::Output {
3100		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3101	}
3102}
3103/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3104#[cfg(feature="num-complex")]
3105impl<T> core::ops::Div<Molality<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3106	type Output = MolarMass<T>;
3107	fn div(self, rhs: Molality<T>) -> Self::Output {
3108		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3109	}
3110}
3111/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3112#[cfg(feature="num-complex")]
3113impl<T> core::ops::Div<&Molality<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3114	type Output = MolarMass<T>;
3115	fn div(self, rhs: &Molality<T>) -> Self::Output {
3116		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3117	}
3118}
3119/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3120#[cfg(feature="num-complex")]
3121impl<T> core::ops::Div<&Molality<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3122	type Output = MolarMass<T>;
3123	fn div(self, rhs: &Molality<T>) -> Self::Output {
3124		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3125	}
3126}
3127
3128// 1/Molality -> MolarMass
3129/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3130#[cfg(feature="num-complex")]
3131impl<T> core::ops::Div<Molality<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3132	type Output = MolarMass<T>;
3133	fn div(self, rhs: Molality<T>) -> Self::Output {
3134		MolarMass{kgpmol: T::from(self) / rhs.molpkg}
3135	}
3136}
3137/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3138#[cfg(feature="num-complex")]
3139impl<T> core::ops::Div<Molality<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3140	type Output = MolarMass<T>;
3141	fn div(self, rhs: Molality<T>) -> Self::Output {
3142		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg}
3143	}
3144}
3145/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3146#[cfg(feature="num-complex")]
3147impl<T> core::ops::Div<&Molality<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3148	type Output = MolarMass<T>;
3149	fn div(self, rhs: &Molality<T>) -> Self::Output {
3150		MolarMass{kgpmol: T::from(self) / rhs.molpkg.clone()}
3151	}
3152}
3153/// Dividing a scalar value by a Molality unit value returns a value of type MolarMass
3154#[cfg(feature="num-complex")]
3155impl<T> core::ops::Div<&Molality<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3156	type Output = MolarMass<T>;
3157	fn div(self, rhs: &Molality<T>) -> Self::Output {
3158		MolarMass{kgpmol: T::from(self.clone()) / rhs.molpkg.clone()}
3159	}
3160}
3161
3162/// The molar mass unit type, defined as kilograms per mole in SI units
3163#[derive(UnitStruct, Debug, Clone)]
3164#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
3165pub struct MolarMass<T: NumLike>{
3166	/// The value of this Molar mass in kilograms per mole
3167	pub kgpmol: T
3168}
3169
3170impl<T> MolarMass<T> where T: NumLike {
3171
3172	/// Returns the standard unit name of molar mass: "kilograms per mole"
3173	pub fn unit_name() -> &'static str { "kilograms per mole" }
3174	
3175	/// Returns the abbreviated name or symbol of molar mass: "kg/mol" for kilograms per mole
3176	pub fn unit_symbol() -> &'static str { "kg/mol" }
3177	
3178	/// Returns a new molar mass value from the given number of kilograms per mole
3179	///
3180	/// # Arguments
3181	/// * `kgpmol` - Any number-like type, representing a quantity of kilograms per mole
3182	pub fn from_kgpmol(kgpmol: T) -> Self { MolarMass{kgpmol: kgpmol} }
3183	
3184	/// Returns a copy of this molar mass value in kilograms per mole
3185	pub fn to_kgpmol(&self) -> T { self.kgpmol.clone() }
3186
3187	/// Returns a new molar mass value from the given number of kilograms per mole
3188	///
3189	/// # Arguments
3190	/// * `kilograms_per_mole` - Any number-like type, representing a quantity of kilograms per mole
3191	pub fn from_kilograms_per_mole(kilograms_per_mole: T) -> Self { MolarMass{kgpmol: kilograms_per_mole} }
3192	
3193	/// Returns a copy of this molar mass value in kilograms per mole
3194	pub fn to_kilograms_per_mole(&self) -> T { self.kgpmol.clone() }
3195
3196}
3197
3198impl<T> fmt::Display for MolarMass<T> where T: NumLike {
3199	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3200		write!(f, "{} {}", &self.kgpmol, Self::unit_symbol())
3201	}
3202}
3203
3204impl<T> MolarMass<T> where T: NumLike+From<f64> {
3205	
3206	/// Returns a copy of this molar mass value in grams per mole
3207	/// 
3208	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3209	pub fn to_gpmol(&self) -> T {
3210		return self.kgpmol.clone() * T::from(1000.0_f64);
3211	}
3212
3213	/// Returns a new molar mass value from the given number of grams per mole
3214	/// 
3215	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3216	///
3217	/// # Arguments
3218	/// * `gpmol` - Any number-like type, representing a quantity of grams per mole
3219	pub fn from_gpmol(gpmol: T) -> Self {
3220		MolarMass{kgpmol: gpmol * T::from(0.001_f64)}
3221	}
3222
3223	/// Returns a copy of this molar mass value in grams per mole
3224	/// 
3225	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3226	pub fn to_grams_per_mole(&self) -> T {
3227		return self.kgpmol.clone() * T::from(1000.0_f64);
3228	}
3229
3230	/// Returns a new molar mass value from the given number of grams per mole
3231	/// 
3232	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3233	///
3234	/// # Arguments
3235	/// * `grams_per_mole` - Any number-like type, representing a quantity of grams per mole
3236	pub fn from_grams_per_mole(grams_per_mole: T) -> Self {
3237		MolarMass{kgpmol: grams_per_mole * T::from(0.001_f64)}
3238	}
3239
3240}
3241
3242
3243/// Multiplying a unit value by a scalar value returns a unit value
3244#[cfg(feature="num-bigfloat")]
3245impl core::ops::Mul<MolarMass<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3246	type Output = MolarMass<num_bigfloat::BigFloat>;
3247	fn mul(self, rhs: MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3248		MolarMass{kgpmol: self * rhs.kgpmol}
3249	}
3250}
3251/// Multiplying a unit value by a scalar value returns a unit value
3252#[cfg(feature="num-bigfloat")]
3253impl core::ops::Mul<MolarMass<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3254	type Output = MolarMass<num_bigfloat::BigFloat>;
3255	fn mul(self, rhs: MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3256		MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3257	}
3258}
3259/// Multiplying a unit value by a scalar value returns a unit value
3260#[cfg(feature="num-bigfloat")]
3261impl core::ops::Mul<&MolarMass<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3262	type Output = MolarMass<num_bigfloat::BigFloat>;
3263	fn mul(self, rhs: &MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3264		MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3265	}
3266}
3267/// Multiplying a unit value by a scalar value returns a unit value
3268#[cfg(feature="num-bigfloat")]
3269impl core::ops::Mul<&MolarMass<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3270	type Output = MolarMass<num_bigfloat::BigFloat>;
3271	fn mul(self, rhs: &MolarMass<num_bigfloat::BigFloat>) -> Self::Output {
3272		MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3273	}
3274}
3275
3276/// Multiplying a unit value by a scalar value returns a unit value
3277#[cfg(feature="num-complex")]
3278impl core::ops::Mul<MolarMass<num_complex::Complex32>> for num_complex::Complex32 {
3279	type Output = MolarMass<num_complex::Complex32>;
3280	fn mul(self, rhs: MolarMass<num_complex::Complex32>) -> Self::Output {
3281		MolarMass{kgpmol: self * rhs.kgpmol}
3282	}
3283}
3284/// Multiplying a unit value by a scalar value returns a unit value
3285#[cfg(feature="num-complex")]
3286impl core::ops::Mul<MolarMass<num_complex::Complex32>> for &num_complex::Complex32 {
3287	type Output = MolarMass<num_complex::Complex32>;
3288	fn mul(self, rhs: MolarMass<num_complex::Complex32>) -> Self::Output {
3289		MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3290	}
3291}
3292/// Multiplying a unit value by a scalar value returns a unit value
3293#[cfg(feature="num-complex")]
3294impl core::ops::Mul<&MolarMass<num_complex::Complex32>> for num_complex::Complex32 {
3295	type Output = MolarMass<num_complex::Complex32>;
3296	fn mul(self, rhs: &MolarMass<num_complex::Complex32>) -> Self::Output {
3297		MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3298	}
3299}
3300/// Multiplying a unit value by a scalar value returns a unit value
3301#[cfg(feature="num-complex")]
3302impl core::ops::Mul<&MolarMass<num_complex::Complex32>> for &num_complex::Complex32 {
3303	type Output = MolarMass<num_complex::Complex32>;
3304	fn mul(self, rhs: &MolarMass<num_complex::Complex32>) -> Self::Output {
3305		MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3306	}
3307}
3308
3309/// Multiplying a unit value by a scalar value returns a unit value
3310#[cfg(feature="num-complex")]
3311impl core::ops::Mul<MolarMass<num_complex::Complex64>> for num_complex::Complex64 {
3312	type Output = MolarMass<num_complex::Complex64>;
3313	fn mul(self, rhs: MolarMass<num_complex::Complex64>) -> Self::Output {
3314		MolarMass{kgpmol: self * rhs.kgpmol}
3315	}
3316}
3317/// Multiplying a unit value by a scalar value returns a unit value
3318#[cfg(feature="num-complex")]
3319impl core::ops::Mul<MolarMass<num_complex::Complex64>> for &num_complex::Complex64 {
3320	type Output = MolarMass<num_complex::Complex64>;
3321	fn mul(self, rhs: MolarMass<num_complex::Complex64>) -> Self::Output {
3322		MolarMass{kgpmol: self.clone() * rhs.kgpmol}
3323	}
3324}
3325/// Multiplying a unit value by a scalar value returns a unit value
3326#[cfg(feature="num-complex")]
3327impl core::ops::Mul<&MolarMass<num_complex::Complex64>> for num_complex::Complex64 {
3328	type Output = MolarMass<num_complex::Complex64>;
3329	fn mul(self, rhs: &MolarMass<num_complex::Complex64>) -> Self::Output {
3330		MolarMass{kgpmol: self * rhs.kgpmol.clone()}
3331	}
3332}
3333/// Multiplying a unit value by a scalar value returns a unit value
3334#[cfg(feature="num-complex")]
3335impl core::ops::Mul<&MolarMass<num_complex::Complex64>> for &num_complex::Complex64 {
3336	type Output = MolarMass<num_complex::Complex64>;
3337	fn mul(self, rhs: &MolarMass<num_complex::Complex64>) -> Self::Output {
3338		MolarMass{kgpmol: self.clone() * rhs.kgpmol.clone()}
3339	}
3340}
3341
3342
3343
3344/// Converts a MolarMass into the equivalent [uom](https://crates.io/crates/uom) type [MolarMass](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarMass.html)
3345#[cfg(feature = "uom")]
3346impl<T> Into<uom::si::f32::MolarMass> for MolarMass<T> where T: NumLike+Into<f32> {
3347	fn into(self) -> uom::si::f32::MolarMass {
3348		uom::si::f32::MolarMass::new::<uom::si::molar_mass::kilogram_per_mole>(self.kgpmol.into())
3349	}
3350}
3351
3352/// Creates a MolarMass from the equivalent [uom](https://crates.io/crates/uom) type [MolarMass](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarMass.html)
3353#[cfg(feature = "uom")]
3354impl<T> From<uom::si::f32::MolarMass> for MolarMass<T> where T: NumLike+From<f32> {
3355	fn from(src: uom::si::f32::MolarMass) -> Self {
3356		MolarMass{kgpmol: T::from(src.value)}
3357	}
3358}
3359
3360/// Converts a MolarMass into the equivalent [uom](https://crates.io/crates/uom) type [MolarMass](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarMass.html)
3361#[cfg(feature = "uom")]
3362impl<T> Into<uom::si::f64::MolarMass> for MolarMass<T> where T: NumLike+Into<f64> {
3363	fn into(self) -> uom::si::f64::MolarMass {
3364		uom::si::f64::MolarMass::new::<uom::si::molar_mass::kilogram_per_mole>(self.kgpmol.into())
3365	}
3366}
3367
3368/// Creates a MolarMass from the equivalent [uom](https://crates.io/crates/uom) type [MolarMass](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarMass.html)
3369#[cfg(feature = "uom")]
3370impl<T> From<uom::si::f64::MolarMass> for MolarMass<T> where T: NumLike+From<f64> {
3371	fn from(src: uom::si::f64::MolarMass) -> Self {
3372		MolarMass{kgpmol: T::from(src.value)}
3373	}
3374}
3375
3376
3377// MolarMass * Amount -> Mass
3378/// Multiplying a MolarMass by a Amount returns a value of type Mass
3379impl<T> core::ops::Mul<Amount<T>> for MolarMass<T> where T: NumLike {
3380	type Output = Mass<T>;
3381	fn mul(self, rhs: Amount<T>) -> Self::Output {
3382		Mass{kg: self.kgpmol * rhs.mol}
3383	}
3384}
3385/// Multiplying a MolarMass by a Amount returns a value of type Mass
3386impl<T> core::ops::Mul<Amount<T>> for &MolarMass<T> where T: NumLike {
3387	type Output = Mass<T>;
3388	fn mul(self, rhs: Amount<T>) -> Self::Output {
3389		Mass{kg: self.kgpmol.clone() * rhs.mol}
3390	}
3391}
3392/// Multiplying a MolarMass by a Amount returns a value of type Mass
3393impl<T> core::ops::Mul<&Amount<T>> for MolarMass<T> where T: NumLike {
3394	type Output = Mass<T>;
3395	fn mul(self, rhs: &Amount<T>) -> Self::Output {
3396		Mass{kg: self.kgpmol * rhs.mol.clone()}
3397	}
3398}
3399/// Multiplying a MolarMass by a Amount returns a value of type Mass
3400impl<T> core::ops::Mul<&Amount<T>> for &MolarMass<T> where T: NumLike {
3401	type Output = Mass<T>;
3402	fn mul(self, rhs: &Amount<T>) -> Self::Output {
3403		Mass{kg: self.kgpmol.clone() * rhs.mol.clone()}
3404	}
3405}
3406
3407// MolarMass / InverseAmount -> Mass
3408/// Dividing a MolarMass by a InverseAmount returns a value of type Mass
3409impl<T> core::ops::Div<InverseAmount<T>> for MolarMass<T> where T: NumLike {
3410	type Output = Mass<T>;
3411	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
3412		Mass{kg: self.kgpmol / rhs.per_mol}
3413	}
3414}
3415/// Dividing a MolarMass by a InverseAmount returns a value of type Mass
3416impl<T> core::ops::Div<InverseAmount<T>> for &MolarMass<T> where T: NumLike {
3417	type Output = Mass<T>;
3418	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
3419		Mass{kg: self.kgpmol.clone() / rhs.per_mol}
3420	}
3421}
3422/// Dividing a MolarMass by a InverseAmount returns a value of type Mass
3423impl<T> core::ops::Div<&InverseAmount<T>> for MolarMass<T> where T: NumLike {
3424	type Output = Mass<T>;
3425	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
3426		Mass{kg: self.kgpmol / rhs.per_mol.clone()}
3427	}
3428}
3429/// Dividing a MolarMass by a InverseAmount returns a value of type Mass
3430impl<T> core::ops::Div<&InverseAmount<T>> for &MolarMass<T> where T: NumLike {
3431	type Output = Mass<T>;
3432	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
3433		Mass{kg: self.kgpmol.clone() / rhs.per_mol.clone()}
3434	}
3435}
3436
3437// MolarMass * InverseMass -> InverseAmount
3438/// Multiplying a MolarMass by a InverseMass returns a value of type InverseAmount
3439impl<T> core::ops::Mul<InverseMass<T>> for MolarMass<T> where T: NumLike {
3440	type Output = InverseAmount<T>;
3441	fn mul(self, rhs: InverseMass<T>) -> Self::Output {
3442		InverseAmount{per_mol: self.kgpmol * rhs.per_kg}
3443	}
3444}
3445/// Multiplying a MolarMass by a InverseMass returns a value of type InverseAmount
3446impl<T> core::ops::Mul<InverseMass<T>> for &MolarMass<T> where T: NumLike {
3447	type Output = InverseAmount<T>;
3448	fn mul(self, rhs: InverseMass<T>) -> Self::Output {
3449		InverseAmount{per_mol: self.kgpmol.clone() * rhs.per_kg}
3450	}
3451}
3452/// Multiplying a MolarMass by a InverseMass returns a value of type InverseAmount
3453impl<T> core::ops::Mul<&InverseMass<T>> for MolarMass<T> where T: NumLike {
3454	type Output = InverseAmount<T>;
3455	fn mul(self, rhs: &InverseMass<T>) -> Self::Output {
3456		InverseAmount{per_mol: self.kgpmol * rhs.per_kg.clone()}
3457	}
3458}
3459/// Multiplying a MolarMass by a InverseMass returns a value of type InverseAmount
3460impl<T> core::ops::Mul<&InverseMass<T>> for &MolarMass<T> where T: NumLike {
3461	type Output = InverseAmount<T>;
3462	fn mul(self, rhs: &InverseMass<T>) -> Self::Output {
3463		InverseAmount{per_mol: self.kgpmol.clone() * rhs.per_kg.clone()}
3464	}
3465}
3466
3467// MolarMass / Mass -> InverseAmount
3468/// Dividing a MolarMass by a Mass returns a value of type InverseAmount
3469impl<T> core::ops::Div<Mass<T>> for MolarMass<T> where T: NumLike {
3470	type Output = InverseAmount<T>;
3471	fn div(self, rhs: Mass<T>) -> Self::Output {
3472		InverseAmount{per_mol: self.kgpmol / rhs.kg}
3473	}
3474}
3475/// Dividing a MolarMass by a Mass returns a value of type InverseAmount
3476impl<T> core::ops::Div<Mass<T>> for &MolarMass<T> where T: NumLike {
3477	type Output = InverseAmount<T>;
3478	fn div(self, rhs: Mass<T>) -> Self::Output {
3479		InverseAmount{per_mol: self.kgpmol.clone() / rhs.kg}
3480	}
3481}
3482/// Dividing a MolarMass by a Mass returns a value of type InverseAmount
3483impl<T> core::ops::Div<&Mass<T>> for MolarMass<T> where T: NumLike {
3484	type Output = InverseAmount<T>;
3485	fn div(self, rhs: &Mass<T>) -> Self::Output {
3486		InverseAmount{per_mol: self.kgpmol / rhs.kg.clone()}
3487	}
3488}
3489/// Dividing a MolarMass by a Mass returns a value of type InverseAmount
3490impl<T> core::ops::Div<&Mass<T>> for &MolarMass<T> where T: NumLike {
3491	type Output = InverseAmount<T>;
3492	fn div(self, rhs: &Mass<T>) -> Self::Output {
3493		InverseAmount{per_mol: self.kgpmol.clone() / rhs.kg.clone()}
3494	}
3495}
3496
3497// MolarMass * Concentration -> Density
3498/// Multiplying a MolarMass by a Concentration returns a value of type Density
3499impl<T> core::ops::Mul<Concentration<T>> for MolarMass<T> where T: NumLike {
3500	type Output = Density<T>;
3501	fn mul(self, rhs: Concentration<T>) -> Self::Output {
3502		Density{kgpm3: self.kgpmol * rhs.molpm3}
3503	}
3504}
3505/// Multiplying a MolarMass by a Concentration returns a value of type Density
3506impl<T> core::ops::Mul<Concentration<T>> for &MolarMass<T> where T: NumLike {
3507	type Output = Density<T>;
3508	fn mul(self, rhs: Concentration<T>) -> Self::Output {
3509		Density{kgpm3: self.kgpmol.clone() * rhs.molpm3}
3510	}
3511}
3512/// Multiplying a MolarMass by a Concentration returns a value of type Density
3513impl<T> core::ops::Mul<&Concentration<T>> for MolarMass<T> where T: NumLike {
3514	type Output = Density<T>;
3515	fn mul(self, rhs: &Concentration<T>) -> Self::Output {
3516		Density{kgpm3: self.kgpmol * rhs.molpm3.clone()}
3517	}
3518}
3519/// Multiplying a MolarMass by a Concentration returns a value of type Density
3520impl<T> core::ops::Mul<&Concentration<T>> for &MolarMass<T> where T: NumLike {
3521	type Output = Density<T>;
3522	fn mul(self, rhs: &Concentration<T>) -> Self::Output {
3523		Density{kgpm3: self.kgpmol.clone() * rhs.molpm3.clone()}
3524	}
3525}
3526
3527// MolarMass / MolarVolume -> Density
3528/// Dividing a MolarMass by a MolarVolume returns a value of type Density
3529impl<T> core::ops::Div<MolarVolume<T>> for MolarMass<T> where T: NumLike {
3530	type Output = Density<T>;
3531	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
3532		Density{kgpm3: self.kgpmol / rhs.m3_per_mol}
3533	}
3534}
3535/// Dividing a MolarMass by a MolarVolume returns a value of type Density
3536impl<T> core::ops::Div<MolarVolume<T>> for &MolarMass<T> where T: NumLike {
3537	type Output = Density<T>;
3538	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
3539		Density{kgpm3: self.kgpmol.clone() / rhs.m3_per_mol}
3540	}
3541}
3542/// Dividing a MolarMass by a MolarVolume returns a value of type Density
3543impl<T> core::ops::Div<&MolarVolume<T>> for MolarMass<T> where T: NumLike {
3544	type Output = Density<T>;
3545	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
3546		Density{kgpm3: self.kgpmol / rhs.m3_per_mol.clone()}
3547	}
3548}
3549/// Dividing a MolarMass by a MolarVolume returns a value of type Density
3550impl<T> core::ops::Div<&MolarVolume<T>> for &MolarMass<T> where T: NumLike {
3551	type Output = Density<T>;
3552	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
3553		Density{kgpm3: self.kgpmol.clone() / rhs.m3_per_mol.clone()}
3554	}
3555}
3556
3557// MolarMass / Density -> MolarVolume
3558/// Dividing a MolarMass by a Density returns a value of type MolarVolume
3559impl<T> core::ops::Div<Density<T>> for MolarMass<T> where T: NumLike {
3560	type Output = MolarVolume<T>;
3561	fn div(self, rhs: Density<T>) -> Self::Output {
3562		MolarVolume{m3_per_mol: self.kgpmol / rhs.kgpm3}
3563	}
3564}
3565/// Dividing a MolarMass by a Density returns a value of type MolarVolume
3566impl<T> core::ops::Div<Density<T>> for &MolarMass<T> where T: NumLike {
3567	type Output = MolarVolume<T>;
3568	fn div(self, rhs: Density<T>) -> Self::Output {
3569		MolarVolume{m3_per_mol: self.kgpmol.clone() / rhs.kgpm3}
3570	}
3571}
3572/// Dividing a MolarMass by a Density returns a value of type MolarVolume
3573impl<T> core::ops::Div<&Density<T>> for MolarMass<T> where T: NumLike {
3574	type Output = MolarVolume<T>;
3575	fn div(self, rhs: &Density<T>) -> Self::Output {
3576		MolarVolume{m3_per_mol: self.kgpmol / rhs.kgpm3.clone()}
3577	}
3578}
3579/// Dividing a MolarMass by a Density returns a value of type MolarVolume
3580impl<T> core::ops::Div<&Density<T>> for &MolarMass<T> where T: NumLike {
3581	type Output = MolarVolume<T>;
3582	fn div(self, rhs: &Density<T>) -> Self::Output {
3583		MolarVolume{m3_per_mol: self.kgpmol.clone() / rhs.kgpm3.clone()}
3584	}
3585}
3586
3587// MolarMass * VolumePerMass -> MolarVolume
3588/// Multiplying a MolarMass by a VolumePerMass returns a value of type MolarVolume
3589impl<T> core::ops::Mul<VolumePerMass<T>> for MolarMass<T> where T: NumLike {
3590	type Output = MolarVolume<T>;
3591	fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
3592		MolarVolume{m3_per_mol: self.kgpmol * rhs.m3_per_kg}
3593	}
3594}
3595/// Multiplying a MolarMass by a VolumePerMass returns a value of type MolarVolume
3596impl<T> core::ops::Mul<VolumePerMass<T>> for &MolarMass<T> where T: NumLike {
3597	type Output = MolarVolume<T>;
3598	fn mul(self, rhs: VolumePerMass<T>) -> Self::Output {
3599		MolarVolume{m3_per_mol: self.kgpmol.clone() * rhs.m3_per_kg}
3600	}
3601}
3602/// Multiplying a MolarMass by a VolumePerMass returns a value of type MolarVolume
3603impl<T> core::ops::Mul<&VolumePerMass<T>> for MolarMass<T> where T: NumLike {
3604	type Output = MolarVolume<T>;
3605	fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
3606		MolarVolume{m3_per_mol: self.kgpmol * rhs.m3_per_kg.clone()}
3607	}
3608}
3609/// Multiplying a MolarMass by a VolumePerMass returns a value of type MolarVolume
3610impl<T> core::ops::Mul<&VolumePerMass<T>> for &MolarMass<T> where T: NumLike {
3611	type Output = MolarVolume<T>;
3612	fn mul(self, rhs: &VolumePerMass<T>) -> Self::Output {
3613		MolarVolume{m3_per_mol: self.kgpmol.clone() * rhs.m3_per_kg.clone()}
3614	}
3615}
3616
3617// 1/MolarMass -> Molality
3618/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3619impl<T> core::ops::Div<MolarMass<T>> for f64 where T: NumLike+From<f64> {
3620	type Output = Molality<T>;
3621	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3622		Molality{molpkg: T::from(self) / rhs.kgpmol}
3623	}
3624}
3625/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3626impl<T> core::ops::Div<MolarMass<T>> for &f64 where T: NumLike+From<f64> {
3627	type Output = Molality<T>;
3628	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3629		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3630	}
3631}
3632/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3633impl<T> core::ops::Div<&MolarMass<T>> for f64 where T: NumLike+From<f64> {
3634	type Output = Molality<T>;
3635	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3636		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3637	}
3638}
3639/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3640impl<T> core::ops::Div<&MolarMass<T>> for &f64 where T: NumLike+From<f64> {
3641	type Output = Molality<T>;
3642	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3643		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3644	}
3645}
3646
3647// 1/MolarMass -> Molality
3648/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3649impl<T> core::ops::Div<MolarMass<T>> for f32 where T: NumLike+From<f32> {
3650	type Output = Molality<T>;
3651	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3652		Molality{molpkg: T::from(self) / rhs.kgpmol}
3653	}
3654}
3655/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3656impl<T> core::ops::Div<MolarMass<T>> for &f32 where T: NumLike+From<f32> {
3657	type Output = Molality<T>;
3658	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3659		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3660	}
3661}
3662/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3663impl<T> core::ops::Div<&MolarMass<T>> for f32 where T: NumLike+From<f32> {
3664	type Output = Molality<T>;
3665	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3666		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3667	}
3668}
3669/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3670impl<T> core::ops::Div<&MolarMass<T>> for &f32 where T: NumLike+From<f32> {
3671	type Output = Molality<T>;
3672	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3673		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3674	}
3675}
3676
3677// 1/MolarMass -> Molality
3678/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3679impl<T> core::ops::Div<MolarMass<T>> for i64 where T: NumLike+From<i64> {
3680	type Output = Molality<T>;
3681	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3682		Molality{molpkg: T::from(self) / rhs.kgpmol}
3683	}
3684}
3685/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3686impl<T> core::ops::Div<MolarMass<T>> for &i64 where T: NumLike+From<i64> {
3687	type Output = Molality<T>;
3688	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3689		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3690	}
3691}
3692/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3693impl<T> core::ops::Div<&MolarMass<T>> for i64 where T: NumLike+From<i64> {
3694	type Output = Molality<T>;
3695	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3696		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3697	}
3698}
3699/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3700impl<T> core::ops::Div<&MolarMass<T>> for &i64 where T: NumLike+From<i64> {
3701	type Output = Molality<T>;
3702	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3703		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3704	}
3705}
3706
3707// 1/MolarMass -> Molality
3708/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3709impl<T> core::ops::Div<MolarMass<T>> for i32 where T: NumLike+From<i32> {
3710	type Output = Molality<T>;
3711	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3712		Molality{molpkg: T::from(self) / rhs.kgpmol}
3713	}
3714}
3715/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3716impl<T> core::ops::Div<MolarMass<T>> for &i32 where T: NumLike+From<i32> {
3717	type Output = Molality<T>;
3718	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3719		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3720	}
3721}
3722/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3723impl<T> core::ops::Div<&MolarMass<T>> for i32 where T: NumLike+From<i32> {
3724	type Output = Molality<T>;
3725	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3726		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3727	}
3728}
3729/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3730impl<T> core::ops::Div<&MolarMass<T>> for &i32 where T: NumLike+From<i32> {
3731	type Output = Molality<T>;
3732	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3733		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3734	}
3735}
3736
3737// 1/MolarMass -> Molality
3738/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3739#[cfg(feature="num-bigfloat")]
3740impl<T> core::ops::Div<MolarMass<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3741	type Output = Molality<T>;
3742	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3743		Molality{molpkg: T::from(self) / rhs.kgpmol}
3744	}
3745}
3746/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3747#[cfg(feature="num-bigfloat")]
3748impl<T> core::ops::Div<MolarMass<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3749	type Output = Molality<T>;
3750	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3751		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3752	}
3753}
3754/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3755#[cfg(feature="num-bigfloat")]
3756impl<T> core::ops::Div<&MolarMass<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3757	type Output = Molality<T>;
3758	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3759		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3760	}
3761}
3762/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3763#[cfg(feature="num-bigfloat")]
3764impl<T> core::ops::Div<&MolarMass<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
3765	type Output = Molality<T>;
3766	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3767		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3768	}
3769}
3770
3771// 1/MolarMass -> Molality
3772/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3773#[cfg(feature="num-complex")]
3774impl<T> core::ops::Div<MolarMass<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3775	type Output = Molality<T>;
3776	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3777		Molality{molpkg: T::from(self) / rhs.kgpmol}
3778	}
3779}
3780/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3781#[cfg(feature="num-complex")]
3782impl<T> core::ops::Div<MolarMass<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3783	type Output = Molality<T>;
3784	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3785		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3786	}
3787}
3788/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3789#[cfg(feature="num-complex")]
3790impl<T> core::ops::Div<&MolarMass<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3791	type Output = Molality<T>;
3792	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3793		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3794	}
3795}
3796/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3797#[cfg(feature="num-complex")]
3798impl<T> core::ops::Div<&MolarMass<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
3799	type Output = Molality<T>;
3800	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3801		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3802	}
3803}
3804
3805// 1/MolarMass -> Molality
3806/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3807#[cfg(feature="num-complex")]
3808impl<T> core::ops::Div<MolarMass<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3809	type Output = Molality<T>;
3810	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3811		Molality{molpkg: T::from(self) / rhs.kgpmol}
3812	}
3813}
3814/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3815#[cfg(feature="num-complex")]
3816impl<T> core::ops::Div<MolarMass<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3817	type Output = Molality<T>;
3818	fn div(self, rhs: MolarMass<T>) -> Self::Output {
3819		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol}
3820	}
3821}
3822/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3823#[cfg(feature="num-complex")]
3824impl<T> core::ops::Div<&MolarMass<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3825	type Output = Molality<T>;
3826	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3827		Molality{molpkg: T::from(self) / rhs.kgpmol.clone()}
3828	}
3829}
3830/// Dividing a scalar value by a MolarMass unit value returns a value of type Molality
3831#[cfg(feature="num-complex")]
3832impl<T> core::ops::Div<&MolarMass<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
3833	type Output = Molality<T>;
3834	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
3835		Molality{molpkg: T::from(self.clone()) / rhs.kgpmol.clone()}
3836	}
3837}
3838
3839/// The volume per mole unit type, defined as cubic meters per mole in SI units
3840#[derive(UnitStruct, Debug, Clone)]
3841#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
3842pub struct MolarVolume<T: NumLike>{
3843	/// The value of this Molar volume in cubic meters per mole
3844	pub m3_per_mol: T
3845}
3846
3847impl<T> MolarVolume<T> where T: NumLike {
3848
3849	/// Returns the standard unit name of molar volume: "cubic meters per mole"
3850	pub fn unit_name() -> &'static str { "cubic meters per mole" }
3851	
3852	/// Returns the abbreviated name or symbol of molar volume: "m³/mol" for cubic meters per mole
3853	pub fn unit_symbol() -> &'static str { "m³/mol" }
3854	
3855	/// Returns a new molar volume value from the given number of cubic meters per mole
3856	///
3857	/// # Arguments
3858	/// * `m3_per_mol` - Any number-like type, representing a quantity of cubic meters per mole
3859	pub fn from_m3_per_mol(m3_per_mol: T) -> Self { MolarVolume{m3_per_mol: m3_per_mol} }
3860	
3861	/// Returns a copy of this molar volume value in cubic meters per mole
3862	pub fn to_m3_per_mol(&self) -> T { self.m3_per_mol.clone() }
3863
3864	/// Returns a new molar volume value from the given number of cubic meters per mole
3865	///
3866	/// # Arguments
3867	/// * `cubic_meters_per_mole` - Any number-like type, representing a quantity of cubic meters per mole
3868	pub fn from_cubic_meters_per_mole(cubic_meters_per_mole: T) -> Self { MolarVolume{m3_per_mol: cubic_meters_per_mole} }
3869	
3870	/// Returns a copy of this molar volume value in cubic meters per mole
3871	pub fn to_cubic_meters_per_mole(&self) -> T { self.m3_per_mol.clone() }
3872
3873}
3874
3875impl<T> fmt::Display for MolarVolume<T> where T: NumLike {
3876	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3877		write!(f, "{} {}", &self.m3_per_mol, Self::unit_symbol())
3878	}
3879}
3880
3881impl<T> MolarVolume<T> where T: NumLike+From<f64> {
3882	
3883	/// Returns a copy of this molar volume value in liters per mole
3884	/// 
3885	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3886	pub fn to_L_per_mol(&self) -> T {
3887		return self.m3_per_mol.clone() * T::from(1000.0_f64);
3888	}
3889
3890	/// Returns a new molar volume value from the given number of liters per mole
3891	/// 
3892	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3893	///
3894	/// # Arguments
3895	/// * `L_per_mol` - Any number-like type, representing a quantity of liters per mole
3896	pub fn from_L_per_mol(L_per_mol: T) -> Self {
3897		MolarVolume{m3_per_mol: L_per_mol * T::from(0.001_f64)}
3898	}
3899
3900	/// Returns a copy of this molar volume value in liters per mole
3901	/// 
3902	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3903	pub fn to_liters_per_mole(&self) -> T {
3904		return self.m3_per_mol.clone() * T::from(1000.0_f64);
3905	}
3906
3907	/// Returns a new molar volume value from the given number of liters per mole
3908	/// 
3909	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
3910	///
3911	/// # Arguments
3912	/// * `liters_per_mole` - Any number-like type, representing a quantity of liters per mole
3913	pub fn from_liters_per_mole(liters_per_mole: T) -> Self {
3914		MolarVolume{m3_per_mol: liters_per_mole * T::from(0.001_f64)}
3915	}
3916
3917}
3918
3919
3920/// Multiplying a unit value by a scalar value returns a unit value
3921#[cfg(feature="num-bigfloat")]
3922impl core::ops::Mul<MolarVolume<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3923	type Output = MolarVolume<num_bigfloat::BigFloat>;
3924	fn mul(self, rhs: MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3925		MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3926	}
3927}
3928/// Multiplying a unit value by a scalar value returns a unit value
3929#[cfg(feature="num-bigfloat")]
3930impl core::ops::Mul<MolarVolume<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3931	type Output = MolarVolume<num_bigfloat::BigFloat>;
3932	fn mul(self, rhs: MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3933		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
3934	}
3935}
3936/// Multiplying a unit value by a scalar value returns a unit value
3937#[cfg(feature="num-bigfloat")]
3938impl core::ops::Mul<&MolarVolume<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
3939	type Output = MolarVolume<num_bigfloat::BigFloat>;
3940	fn mul(self, rhs: &MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3941		MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
3942	}
3943}
3944/// Multiplying a unit value by a scalar value returns a unit value
3945#[cfg(feature="num-bigfloat")]
3946impl core::ops::Mul<&MolarVolume<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
3947	type Output = MolarVolume<num_bigfloat::BigFloat>;
3948	fn mul(self, rhs: &MolarVolume<num_bigfloat::BigFloat>) -> Self::Output {
3949		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
3950	}
3951}
3952
3953/// Multiplying a unit value by a scalar value returns a unit value
3954#[cfg(feature="num-complex")]
3955impl core::ops::Mul<MolarVolume<num_complex::Complex32>> for num_complex::Complex32 {
3956	type Output = MolarVolume<num_complex::Complex32>;
3957	fn mul(self, rhs: MolarVolume<num_complex::Complex32>) -> Self::Output {
3958		MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3959	}
3960}
3961/// Multiplying a unit value by a scalar value returns a unit value
3962#[cfg(feature="num-complex")]
3963impl core::ops::Mul<MolarVolume<num_complex::Complex32>> for &num_complex::Complex32 {
3964	type Output = MolarVolume<num_complex::Complex32>;
3965	fn mul(self, rhs: MolarVolume<num_complex::Complex32>) -> Self::Output {
3966		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
3967	}
3968}
3969/// Multiplying a unit value by a scalar value returns a unit value
3970#[cfg(feature="num-complex")]
3971impl core::ops::Mul<&MolarVolume<num_complex::Complex32>> for num_complex::Complex32 {
3972	type Output = MolarVolume<num_complex::Complex32>;
3973	fn mul(self, rhs: &MolarVolume<num_complex::Complex32>) -> Self::Output {
3974		MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
3975	}
3976}
3977/// Multiplying a unit value by a scalar value returns a unit value
3978#[cfg(feature="num-complex")]
3979impl core::ops::Mul<&MolarVolume<num_complex::Complex32>> for &num_complex::Complex32 {
3980	type Output = MolarVolume<num_complex::Complex32>;
3981	fn mul(self, rhs: &MolarVolume<num_complex::Complex32>) -> Self::Output {
3982		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
3983	}
3984}
3985
3986/// Multiplying a unit value by a scalar value returns a unit value
3987#[cfg(feature="num-complex")]
3988impl core::ops::Mul<MolarVolume<num_complex::Complex64>> for num_complex::Complex64 {
3989	type Output = MolarVolume<num_complex::Complex64>;
3990	fn mul(self, rhs: MolarVolume<num_complex::Complex64>) -> Self::Output {
3991		MolarVolume{m3_per_mol: self * rhs.m3_per_mol}
3992	}
3993}
3994/// Multiplying a unit value by a scalar value returns a unit value
3995#[cfg(feature="num-complex")]
3996impl core::ops::Mul<MolarVolume<num_complex::Complex64>> for &num_complex::Complex64 {
3997	type Output = MolarVolume<num_complex::Complex64>;
3998	fn mul(self, rhs: MolarVolume<num_complex::Complex64>) -> Self::Output {
3999		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol}
4000	}
4001}
4002/// Multiplying a unit value by a scalar value returns a unit value
4003#[cfg(feature="num-complex")]
4004impl core::ops::Mul<&MolarVolume<num_complex::Complex64>> for num_complex::Complex64 {
4005	type Output = MolarVolume<num_complex::Complex64>;
4006	fn mul(self, rhs: &MolarVolume<num_complex::Complex64>) -> Self::Output {
4007		MolarVolume{m3_per_mol: self * rhs.m3_per_mol.clone()}
4008	}
4009}
4010/// Multiplying a unit value by a scalar value returns a unit value
4011#[cfg(feature="num-complex")]
4012impl core::ops::Mul<&MolarVolume<num_complex::Complex64>> for &num_complex::Complex64 {
4013	type Output = MolarVolume<num_complex::Complex64>;
4014	fn mul(self, rhs: &MolarVolume<num_complex::Complex64>) -> Self::Output {
4015		MolarVolume{m3_per_mol: self.clone() * rhs.m3_per_mol.clone()}
4016	}
4017}
4018
4019
4020
4021/// Converts a MolarVolume into the equivalent [uom](https://crates.io/crates/uom) type [MolarVolume](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarVolume.html)
4022#[cfg(feature = "uom")]
4023impl<T> Into<uom::si::f32::MolarVolume> for MolarVolume<T> where T: NumLike+Into<f32> {
4024	fn into(self) -> uom::si::f32::MolarVolume {
4025		uom::si::f32::MolarVolume::new::<uom::si::molar_volume::cubic_meter_per_mole>(self.m3_per_mol.into())
4026	}
4027}
4028
4029/// Creates a MolarVolume from the equivalent [uom](https://crates.io/crates/uom) type [MolarVolume](https://docs.rs/uom/0.34.0/uom/si/f32/type.MolarVolume.html)
4030#[cfg(feature = "uom")]
4031impl<T> From<uom::si::f32::MolarVolume> for MolarVolume<T> where T: NumLike+From<f32> {
4032	fn from(src: uom::si::f32::MolarVolume) -> Self {
4033		MolarVolume{m3_per_mol: T::from(src.value)}
4034	}
4035}
4036
4037/// Converts a MolarVolume into the equivalent [uom](https://crates.io/crates/uom) type [MolarVolume](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarVolume.html)
4038#[cfg(feature = "uom")]
4039impl<T> Into<uom::si::f64::MolarVolume> for MolarVolume<T> where T: NumLike+Into<f64> {
4040	fn into(self) -> uom::si::f64::MolarVolume {
4041		uom::si::f64::MolarVolume::new::<uom::si::molar_volume::cubic_meter_per_mole>(self.m3_per_mol.into())
4042	}
4043}
4044
4045/// Creates a MolarVolume from the equivalent [uom](https://crates.io/crates/uom) type [MolarVolume](https://docs.rs/uom/0.34.0/uom/si/f64/type.MolarVolume.html)
4046#[cfg(feature = "uom")]
4047impl<T> From<uom::si::f64::MolarVolume> for MolarVolume<T> where T: NumLike+From<f64> {
4048	fn from(src: uom::si::f64::MolarVolume) -> Self {
4049		MolarVolume{m3_per_mol: T::from(src.value)}
4050	}
4051}
4052
4053
4054// MolarVolume * Amount -> Volume
4055/// Multiplying a MolarVolume by a Amount returns a value of type Volume
4056impl<T> core::ops::Mul<Amount<T>> for MolarVolume<T> where T: NumLike {
4057	type Output = Volume<T>;
4058	fn mul(self, rhs: Amount<T>) -> Self::Output {
4059		Volume{m3: self.m3_per_mol * rhs.mol}
4060	}
4061}
4062/// Multiplying a MolarVolume by a Amount returns a value of type Volume
4063impl<T> core::ops::Mul<Amount<T>> for &MolarVolume<T> where T: NumLike {
4064	type Output = Volume<T>;
4065	fn mul(self, rhs: Amount<T>) -> Self::Output {
4066		Volume{m3: self.m3_per_mol.clone() * rhs.mol}
4067	}
4068}
4069/// Multiplying a MolarVolume by a Amount returns a value of type Volume
4070impl<T> core::ops::Mul<&Amount<T>> for MolarVolume<T> where T: NumLike {
4071	type Output = Volume<T>;
4072	fn mul(self, rhs: &Amount<T>) -> Self::Output {
4073		Volume{m3: self.m3_per_mol * rhs.mol.clone()}
4074	}
4075}
4076/// Multiplying a MolarVolume by a Amount returns a value of type Volume
4077impl<T> core::ops::Mul<&Amount<T>> for &MolarVolume<T> where T: NumLike {
4078	type Output = Volume<T>;
4079	fn mul(self, rhs: &Amount<T>) -> Self::Output {
4080		Volume{m3: self.m3_per_mol.clone() * rhs.mol.clone()}
4081	}
4082}
4083
4084// MolarVolume / InverseAmount -> Volume
4085/// Dividing a MolarVolume by a InverseAmount returns a value of type Volume
4086impl<T> core::ops::Div<InverseAmount<T>> for MolarVolume<T> where T: NumLike {
4087	type Output = Volume<T>;
4088	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
4089		Volume{m3: self.m3_per_mol / rhs.per_mol}
4090	}
4091}
4092/// Dividing a MolarVolume by a InverseAmount returns a value of type Volume
4093impl<T> core::ops::Div<InverseAmount<T>> for &MolarVolume<T> where T: NumLike {
4094	type Output = Volume<T>;
4095	fn div(self, rhs: InverseAmount<T>) -> Self::Output {
4096		Volume{m3: self.m3_per_mol.clone() / rhs.per_mol}
4097	}
4098}
4099/// Dividing a MolarVolume by a InverseAmount returns a value of type Volume
4100impl<T> core::ops::Div<&InverseAmount<T>> for MolarVolume<T> where T: NumLike {
4101	type Output = Volume<T>;
4102	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
4103		Volume{m3: self.m3_per_mol / rhs.per_mol.clone()}
4104	}
4105}
4106/// Dividing a MolarVolume by a InverseAmount returns a value of type Volume
4107impl<T> core::ops::Div<&InverseAmount<T>> for &MolarVolume<T> where T: NumLike {
4108	type Output = Volume<T>;
4109	fn div(self, rhs: &InverseAmount<T>) -> Self::Output {
4110		Volume{m3: self.m3_per_mol.clone() / rhs.per_mol.clone()}
4111	}
4112}
4113
4114// MolarVolume * Molality -> VolumePerMass
4115/// Multiplying a MolarVolume by a Molality returns a value of type VolumePerMass
4116impl<T> core::ops::Mul<Molality<T>> for MolarVolume<T> where T: NumLike {
4117	type Output = VolumePerMass<T>;
4118	fn mul(self, rhs: Molality<T>) -> Self::Output {
4119		VolumePerMass{m3_per_kg: self.m3_per_mol * rhs.molpkg}
4120	}
4121}
4122/// Multiplying a MolarVolume by a Molality returns a value of type VolumePerMass
4123impl<T> core::ops::Mul<Molality<T>> for &MolarVolume<T> where T: NumLike {
4124	type Output = VolumePerMass<T>;
4125	fn mul(self, rhs: Molality<T>) -> Self::Output {
4126		VolumePerMass{m3_per_kg: self.m3_per_mol.clone() * rhs.molpkg}
4127	}
4128}
4129/// Multiplying a MolarVolume by a Molality returns a value of type VolumePerMass
4130impl<T> core::ops::Mul<&Molality<T>> for MolarVolume<T> where T: NumLike {
4131	type Output = VolumePerMass<T>;
4132	fn mul(self, rhs: &Molality<T>) -> Self::Output {
4133		VolumePerMass{m3_per_kg: self.m3_per_mol * rhs.molpkg.clone()}
4134	}
4135}
4136/// Multiplying a MolarVolume by a Molality returns a value of type VolumePerMass
4137impl<T> core::ops::Mul<&Molality<T>> for &MolarVolume<T> where T: NumLike {
4138	type Output = VolumePerMass<T>;
4139	fn mul(self, rhs: &Molality<T>) -> Self::Output {
4140		VolumePerMass{m3_per_kg: self.m3_per_mol.clone() * rhs.molpkg.clone()}
4141	}
4142}
4143
4144// MolarVolume / MolarMass -> VolumePerMass
4145/// Dividing a MolarVolume by a MolarMass returns a value of type VolumePerMass
4146impl<T> core::ops::Div<MolarMass<T>> for MolarVolume<T> where T: NumLike {
4147	type Output = VolumePerMass<T>;
4148	fn div(self, rhs: MolarMass<T>) -> Self::Output {
4149		VolumePerMass{m3_per_kg: self.m3_per_mol / rhs.kgpmol}
4150	}
4151}
4152/// Dividing a MolarVolume by a MolarMass returns a value of type VolumePerMass
4153impl<T> core::ops::Div<MolarMass<T>> for &MolarVolume<T> where T: NumLike {
4154	type Output = VolumePerMass<T>;
4155	fn div(self, rhs: MolarMass<T>) -> Self::Output {
4156		VolumePerMass{m3_per_kg: self.m3_per_mol.clone() / rhs.kgpmol}
4157	}
4158}
4159/// Dividing a MolarVolume by a MolarMass returns a value of type VolumePerMass
4160impl<T> core::ops::Div<&MolarMass<T>> for MolarVolume<T> where T: NumLike {
4161	type Output = VolumePerMass<T>;
4162	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
4163		VolumePerMass{m3_per_kg: self.m3_per_mol / rhs.kgpmol.clone()}
4164	}
4165}
4166/// Dividing a MolarVolume by a MolarMass returns a value of type VolumePerMass
4167impl<T> core::ops::Div<&MolarMass<T>> for &MolarVolume<T> where T: NumLike {
4168	type Output = VolumePerMass<T>;
4169	fn div(self, rhs: &MolarMass<T>) -> Self::Output {
4170		VolumePerMass{m3_per_kg: self.m3_per_mol.clone() / rhs.kgpmol.clone()}
4171	}
4172}
4173
4174// MolarVolume * InverseVolume -> InverseAmount
4175/// Multiplying a MolarVolume by a InverseVolume returns a value of type InverseAmount
4176impl<T> core::ops::Mul<InverseVolume<T>> for MolarVolume<T> where T: NumLike {
4177	type Output = InverseAmount<T>;
4178	fn mul(self, rhs: InverseVolume<T>) -> Self::Output {
4179		InverseAmount{per_mol: self.m3_per_mol * rhs.per_m3}
4180	}
4181}
4182/// Multiplying a MolarVolume by a InverseVolume returns a value of type InverseAmount
4183impl<T> core::ops::Mul<InverseVolume<T>> for &MolarVolume<T> where T: NumLike {
4184	type Output = InverseAmount<T>;
4185	fn mul(self, rhs: InverseVolume<T>) -> Self::Output {
4186		InverseAmount{per_mol: self.m3_per_mol.clone() * rhs.per_m3}
4187	}
4188}
4189/// Multiplying a MolarVolume by a InverseVolume returns a value of type InverseAmount
4190impl<T> core::ops::Mul<&InverseVolume<T>> for MolarVolume<T> where T: NumLike {
4191	type Output = InverseAmount<T>;
4192	fn mul(self, rhs: &InverseVolume<T>) -> Self::Output {
4193		InverseAmount{per_mol: self.m3_per_mol * rhs.per_m3.clone()}
4194	}
4195}
4196/// Multiplying a MolarVolume by a InverseVolume returns a value of type InverseAmount
4197impl<T> core::ops::Mul<&InverseVolume<T>> for &MolarVolume<T> where T: NumLike {
4198	type Output = InverseAmount<T>;
4199	fn mul(self, rhs: &InverseVolume<T>) -> Self::Output {
4200		InverseAmount{per_mol: self.m3_per_mol.clone() * rhs.per_m3.clone()}
4201	}
4202}
4203
4204// MolarVolume / Volume -> InverseAmount
4205/// Dividing a MolarVolume by a Volume returns a value of type InverseAmount
4206impl<T> core::ops::Div<Volume<T>> for MolarVolume<T> where T: NumLike {
4207	type Output = InverseAmount<T>;
4208	fn div(self, rhs: Volume<T>) -> Self::Output {
4209		InverseAmount{per_mol: self.m3_per_mol / rhs.m3}
4210	}
4211}
4212/// Dividing a MolarVolume by a Volume returns a value of type InverseAmount
4213impl<T> core::ops::Div<Volume<T>> for &MolarVolume<T> where T: NumLike {
4214	type Output = InverseAmount<T>;
4215	fn div(self, rhs: Volume<T>) -> Self::Output {
4216		InverseAmount{per_mol: self.m3_per_mol.clone() / rhs.m3}
4217	}
4218}
4219/// Dividing a MolarVolume by a Volume returns a value of type InverseAmount
4220impl<T> core::ops::Div<&Volume<T>> for MolarVolume<T> where T: NumLike {
4221	type Output = InverseAmount<T>;
4222	fn div(self, rhs: &Volume<T>) -> Self::Output {
4223		InverseAmount{per_mol: self.m3_per_mol / rhs.m3.clone()}
4224	}
4225}
4226/// Dividing a MolarVolume by a Volume returns a value of type InverseAmount
4227impl<T> core::ops::Div<&Volume<T>> for &MolarVolume<T> where T: NumLike {
4228	type Output = InverseAmount<T>;
4229	fn div(self, rhs: &Volume<T>) -> Self::Output {
4230		InverseAmount{per_mol: self.m3_per_mol.clone() / rhs.m3.clone()}
4231	}
4232}
4233
4234// MolarVolume * Density -> MolarMass
4235/// Multiplying a MolarVolume by a Density returns a value of type MolarMass
4236impl<T> core::ops::Mul<Density<T>> for MolarVolume<T> where T: NumLike {
4237	type Output = MolarMass<T>;
4238	fn mul(self, rhs: Density<T>) -> Self::Output {
4239		MolarMass{kgpmol: self.m3_per_mol * rhs.kgpm3}
4240	}
4241}
4242/// Multiplying a MolarVolume by a Density returns a value of type MolarMass
4243impl<T> core::ops::Mul<Density<T>> for &MolarVolume<T> where T: NumLike {
4244	type Output = MolarMass<T>;
4245	fn mul(self, rhs: Density<T>) -> Self::Output {
4246		MolarMass{kgpmol: self.m3_per_mol.clone() * rhs.kgpm3}
4247	}
4248}
4249/// Multiplying a MolarVolume by a Density returns a value of type MolarMass
4250impl<T> core::ops::Mul<&Density<T>> for MolarVolume<T> where T: NumLike {
4251	type Output = MolarMass<T>;
4252	fn mul(self, rhs: &Density<T>) -> Self::Output {
4253		MolarMass{kgpmol: self.m3_per_mol * rhs.kgpm3.clone()}
4254	}
4255}
4256/// Multiplying a MolarVolume by a Density returns a value of type MolarMass
4257impl<T> core::ops::Mul<&Density<T>> for &MolarVolume<T> where T: NumLike {
4258	type Output = MolarMass<T>;
4259	fn mul(self, rhs: &Density<T>) -> Self::Output {
4260		MolarMass{kgpmol: self.m3_per_mol.clone() * rhs.kgpm3.clone()}
4261	}
4262}
4263
4264// MolarVolume / VolumePerMass -> MolarMass
4265/// Dividing a MolarVolume by a VolumePerMass returns a value of type MolarMass
4266impl<T> core::ops::Div<VolumePerMass<T>> for MolarVolume<T> where T: NumLike {
4267	type Output = MolarMass<T>;
4268	fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
4269		MolarMass{kgpmol: self.m3_per_mol / rhs.m3_per_kg}
4270	}
4271}
4272/// Dividing a MolarVolume by a VolumePerMass returns a value of type MolarMass
4273impl<T> core::ops::Div<VolumePerMass<T>> for &MolarVolume<T> where T: NumLike {
4274	type Output = MolarMass<T>;
4275	fn div(self, rhs: VolumePerMass<T>) -> Self::Output {
4276		MolarMass{kgpmol: self.m3_per_mol.clone() / rhs.m3_per_kg}
4277	}
4278}
4279/// Dividing a MolarVolume by a VolumePerMass returns a value of type MolarMass
4280impl<T> core::ops::Div<&VolumePerMass<T>> for MolarVolume<T> where T: NumLike {
4281	type Output = MolarMass<T>;
4282	fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
4283		MolarMass{kgpmol: self.m3_per_mol / rhs.m3_per_kg.clone()}
4284	}
4285}
4286/// Dividing a MolarVolume by a VolumePerMass returns a value of type MolarMass
4287impl<T> core::ops::Div<&VolumePerMass<T>> for &MolarVolume<T> where T: NumLike {
4288	type Output = MolarMass<T>;
4289	fn div(self, rhs: &VolumePerMass<T>) -> Self::Output {
4290		MolarMass{kgpmol: self.m3_per_mol.clone() / rhs.m3_per_kg.clone()}
4291	}
4292}
4293
4294// 1/MolarVolume -> Concentration
4295/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4296impl<T> core::ops::Div<MolarVolume<T>> for f64 where T: NumLike+From<f64> {
4297	type Output = Concentration<T>;
4298	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4299		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4300	}
4301}
4302/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4303impl<T> core::ops::Div<MolarVolume<T>> for &f64 where T: NumLike+From<f64> {
4304	type Output = Concentration<T>;
4305	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4306		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4307	}
4308}
4309/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4310impl<T> core::ops::Div<&MolarVolume<T>> for f64 where T: NumLike+From<f64> {
4311	type Output = Concentration<T>;
4312	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4313		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4314	}
4315}
4316/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4317impl<T> core::ops::Div<&MolarVolume<T>> for &f64 where T: NumLike+From<f64> {
4318	type Output = Concentration<T>;
4319	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4320		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4321	}
4322}
4323
4324// 1/MolarVolume -> Concentration
4325/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4326impl<T> core::ops::Div<MolarVolume<T>> for f32 where T: NumLike+From<f32> {
4327	type Output = Concentration<T>;
4328	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4329		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4330	}
4331}
4332/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4333impl<T> core::ops::Div<MolarVolume<T>> for &f32 where T: NumLike+From<f32> {
4334	type Output = Concentration<T>;
4335	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4336		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4337	}
4338}
4339/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4340impl<T> core::ops::Div<&MolarVolume<T>> for f32 where T: NumLike+From<f32> {
4341	type Output = Concentration<T>;
4342	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4343		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4344	}
4345}
4346/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4347impl<T> core::ops::Div<&MolarVolume<T>> for &f32 where T: NumLike+From<f32> {
4348	type Output = Concentration<T>;
4349	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4350		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4351	}
4352}
4353
4354// 1/MolarVolume -> Concentration
4355/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4356impl<T> core::ops::Div<MolarVolume<T>> for i64 where T: NumLike+From<i64> {
4357	type Output = Concentration<T>;
4358	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4359		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4360	}
4361}
4362/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4363impl<T> core::ops::Div<MolarVolume<T>> for &i64 where T: NumLike+From<i64> {
4364	type Output = Concentration<T>;
4365	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4366		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4367	}
4368}
4369/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4370impl<T> core::ops::Div<&MolarVolume<T>> for i64 where T: NumLike+From<i64> {
4371	type Output = Concentration<T>;
4372	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4373		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4374	}
4375}
4376/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4377impl<T> core::ops::Div<&MolarVolume<T>> for &i64 where T: NumLike+From<i64> {
4378	type Output = Concentration<T>;
4379	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4380		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4381	}
4382}
4383
4384// 1/MolarVolume -> Concentration
4385/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4386impl<T> core::ops::Div<MolarVolume<T>> for i32 where T: NumLike+From<i32> {
4387	type Output = Concentration<T>;
4388	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4389		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4390	}
4391}
4392/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4393impl<T> core::ops::Div<MolarVolume<T>> for &i32 where T: NumLike+From<i32> {
4394	type Output = Concentration<T>;
4395	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4396		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4397	}
4398}
4399/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4400impl<T> core::ops::Div<&MolarVolume<T>> for i32 where T: NumLike+From<i32> {
4401	type Output = Concentration<T>;
4402	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4403		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4404	}
4405}
4406/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4407impl<T> core::ops::Div<&MolarVolume<T>> for &i32 where T: NumLike+From<i32> {
4408	type Output = Concentration<T>;
4409	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4410		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4411	}
4412}
4413
4414// 1/MolarVolume -> Concentration
4415/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4416#[cfg(feature="num-bigfloat")]
4417impl<T> core::ops::Div<MolarVolume<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4418	type Output = Concentration<T>;
4419	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4420		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4421	}
4422}
4423/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4424#[cfg(feature="num-bigfloat")]
4425impl<T> core::ops::Div<MolarVolume<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4426	type Output = Concentration<T>;
4427	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4428		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4429	}
4430}
4431/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4432#[cfg(feature="num-bigfloat")]
4433impl<T> core::ops::Div<&MolarVolume<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4434	type Output = Concentration<T>;
4435	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4436		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4437	}
4438}
4439/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4440#[cfg(feature="num-bigfloat")]
4441impl<T> core::ops::Div<&MolarVolume<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4442	type Output = Concentration<T>;
4443	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4444		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4445	}
4446}
4447
4448// 1/MolarVolume -> Concentration
4449/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4450#[cfg(feature="num-complex")]
4451impl<T> core::ops::Div<MolarVolume<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4452	type Output = Concentration<T>;
4453	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4454		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4455	}
4456}
4457/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4458#[cfg(feature="num-complex")]
4459impl<T> core::ops::Div<MolarVolume<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4460	type Output = Concentration<T>;
4461	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4462		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4463	}
4464}
4465/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4466#[cfg(feature="num-complex")]
4467impl<T> core::ops::Div<&MolarVolume<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4468	type Output = Concentration<T>;
4469	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4470		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4471	}
4472}
4473/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4474#[cfg(feature="num-complex")]
4475impl<T> core::ops::Div<&MolarVolume<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4476	type Output = Concentration<T>;
4477	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4478		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4479	}
4480}
4481
4482// 1/MolarVolume -> Concentration
4483/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4484#[cfg(feature="num-complex")]
4485impl<T> core::ops::Div<MolarVolume<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4486	type Output = Concentration<T>;
4487	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4488		Concentration{molpm3: T::from(self) / rhs.m3_per_mol}
4489	}
4490}
4491/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4492#[cfg(feature="num-complex")]
4493impl<T> core::ops::Div<MolarVolume<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4494	type Output = Concentration<T>;
4495	fn div(self, rhs: MolarVolume<T>) -> Self::Output {
4496		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol}
4497	}
4498}
4499/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4500#[cfg(feature="num-complex")]
4501impl<T> core::ops::Div<&MolarVolume<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4502	type Output = Concentration<T>;
4503	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4504		Concentration{molpm3: T::from(self) / rhs.m3_per_mol.clone()}
4505	}
4506}
4507/// Dividing a scalar value by a MolarVolume unit value returns a value of type Concentration
4508#[cfg(feature="num-complex")]
4509impl<T> core::ops::Div<&MolarVolume<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4510	type Output = Concentration<T>;
4511	fn div(self, rhs: &MolarVolume<T>) -> Self::Output {
4512		Concentration{molpm3: T::from(self.clone()) / rhs.m3_per_mol.clone()}
4513	}
4514}
4515
4516/// The specific heat capacity unit type, defined as joules per kilogram per kelvin in SI units
4517#[derive(UnitStruct, Debug, Clone)]
4518#[cfg_attr(feature="serde", derive(Serialize, Deserialize))]
4519pub struct SpecificHeatCapacity<T: NumLike>{
4520	/// The value of this Specific heat capacity in joules per kilogram per kelvin
4521	pub J_per_kgK: T
4522}
4523
4524impl<T> SpecificHeatCapacity<T> where T: NumLike {
4525
4526	/// Returns the standard unit name of specific heat capacity: "joules per kilogram per kelvin"
4527	pub fn unit_name() -> &'static str { "joules per kilogram per kelvin" }
4528	
4529	/// Returns the abbreviated name or symbol of specific heat capacity: "J/kg·K" for joules per kilogram per kelvin
4530	pub fn unit_symbol() -> &'static str { "J/kg·K" }
4531	
4532	/// Returns a new specific heat capacity value from the given number of joules per kilogram per kelvin
4533	///
4534	/// # Arguments
4535	/// * `joules_per_kilogram_kelvin` - Any number-like type, representing a quantity of joules per kilogram per kelvin
4536	pub fn from_joules_per_kilogram_kelvin(joules_per_kilogram_kelvin: T) -> Self { SpecificHeatCapacity{J_per_kgK: joules_per_kilogram_kelvin} }
4537	
4538	/// Returns a copy of this specific heat capacity value in joules per kilogram per kelvin
4539	pub fn to_joules_per_kilogram_kelvin(&self) -> T { self.J_per_kgK.clone() }
4540
4541	/// Returns a new specific heat capacity value from the given number of joules per kilogram per kelvin
4542	///
4543	/// # Arguments
4544	/// * `J_per_kgK` - Any number-like type, representing a quantity of joules per kilogram per kelvin
4545	pub fn from_J_per_kgK(J_per_kgK: T) -> Self { SpecificHeatCapacity{J_per_kgK: J_per_kgK} }
4546	
4547	/// Returns a copy of this specific heat capacity value in joules per kilogram per kelvin
4548	pub fn to_J_per_kgK(&self) -> T { self.J_per_kgK.clone() }
4549
4550}
4551
4552impl<T> fmt::Display for SpecificHeatCapacity<T> where T: NumLike {
4553	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
4554		write!(f, "{} {}", &self.J_per_kgK, Self::unit_symbol())
4555	}
4556}
4557
4558impl<T> SpecificHeatCapacity<T> where T: NumLike+From<f64> {
4559	
4560	/// Returns a copy of this specific heat capacity value in joules per gram per kelvin
4561	/// 
4562	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
4563	pub fn to_joules_per_gram_kelvin(&self) -> T {
4564		return self.J_per_kgK.clone() * T::from(0.001_f64);
4565	}
4566
4567	/// Returns a new specific heat capacity value from the given number of joules per gram per kelvin
4568	/// 
4569	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
4570	///
4571	/// # Arguments
4572	/// * `joules_per_gram_kelvin` - Any number-like type, representing a quantity of joules per gram per kelvin
4573	pub fn from_joules_per_gram_kelvin(joules_per_gram_kelvin: T) -> Self {
4574		SpecificHeatCapacity{J_per_kgK: joules_per_gram_kelvin * T::from(1000.0_f64)}
4575	}
4576
4577	/// Returns a copy of this specific heat capacity value in joules per gram per kelvin
4578	/// 
4579	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
4580	pub fn to_J_per_gK(&self) -> T {
4581		return self.J_per_kgK.clone() * T::from(0.001_f64);
4582	}
4583
4584	/// Returns a new specific heat capacity value from the given number of joules per gram per kelvin
4585	/// 
4586	/// *Note: This method is not available for `f32` and other number types lacking the `From<f64>` trait*
4587	///
4588	/// # Arguments
4589	/// * `J_per_gK` - Any number-like type, representing a quantity of joules per gram per kelvin
4590	pub fn from_J_per_gK(J_per_gK: T) -> Self {
4591		SpecificHeatCapacity{J_per_kgK: J_per_gK * T::from(1000.0_f64)}
4592	}
4593
4594}
4595
4596
4597/// Multiplying a unit value by a scalar value returns a unit value
4598#[cfg(feature="num-bigfloat")]
4599impl core::ops::Mul<SpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
4600	type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4601	fn mul(self, rhs: SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4602		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4603	}
4604}
4605/// Multiplying a unit value by a scalar value returns a unit value
4606#[cfg(feature="num-bigfloat")]
4607impl core::ops::Mul<SpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
4608	type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4609	fn mul(self, rhs: SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4610		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4611	}
4612}
4613/// Multiplying a unit value by a scalar value returns a unit value
4614#[cfg(feature="num-bigfloat")]
4615impl core::ops::Mul<&SpecificHeatCapacity<num_bigfloat::BigFloat>> for num_bigfloat::BigFloat {
4616	type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4617	fn mul(self, rhs: &SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4618		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4619	}
4620}
4621/// Multiplying a unit value by a scalar value returns a unit value
4622#[cfg(feature="num-bigfloat")]
4623impl core::ops::Mul<&SpecificHeatCapacity<num_bigfloat::BigFloat>> for &num_bigfloat::BigFloat {
4624	type Output = SpecificHeatCapacity<num_bigfloat::BigFloat>;
4625	fn mul(self, rhs: &SpecificHeatCapacity<num_bigfloat::BigFloat>) -> Self::Output {
4626		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4627	}
4628}
4629
4630/// Multiplying a unit value by a scalar value returns a unit value
4631#[cfg(feature="num-complex")]
4632impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
4633	type Output = SpecificHeatCapacity<num_complex::Complex32>;
4634	fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4635		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4636	}
4637}
4638/// Multiplying a unit value by a scalar value returns a unit value
4639#[cfg(feature="num-complex")]
4640impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
4641	type Output = SpecificHeatCapacity<num_complex::Complex32>;
4642	fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4643		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4644	}
4645}
4646/// Multiplying a unit value by a scalar value returns a unit value
4647#[cfg(feature="num-complex")]
4648impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex32>> for num_complex::Complex32 {
4649	type Output = SpecificHeatCapacity<num_complex::Complex32>;
4650	fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4651		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4652	}
4653}
4654/// Multiplying a unit value by a scalar value returns a unit value
4655#[cfg(feature="num-complex")]
4656impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex32>> for &num_complex::Complex32 {
4657	type Output = SpecificHeatCapacity<num_complex::Complex32>;
4658	fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex32>) -> Self::Output {
4659		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4660	}
4661}
4662
4663/// Multiplying a unit value by a scalar value returns a unit value
4664#[cfg(feature="num-complex")]
4665impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
4666	type Output = SpecificHeatCapacity<num_complex::Complex64>;
4667	fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4668		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK}
4669	}
4670}
4671/// Multiplying a unit value by a scalar value returns a unit value
4672#[cfg(feature="num-complex")]
4673impl core::ops::Mul<SpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
4674	type Output = SpecificHeatCapacity<num_complex::Complex64>;
4675	fn mul(self, rhs: SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4676		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK}
4677	}
4678}
4679/// Multiplying a unit value by a scalar value returns a unit value
4680#[cfg(feature="num-complex")]
4681impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex64>> for num_complex::Complex64 {
4682	type Output = SpecificHeatCapacity<num_complex::Complex64>;
4683	fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4684		SpecificHeatCapacity{J_per_kgK: self * rhs.J_per_kgK.clone()}
4685	}
4686}
4687/// Multiplying a unit value by a scalar value returns a unit value
4688#[cfg(feature="num-complex")]
4689impl core::ops::Mul<&SpecificHeatCapacity<num_complex::Complex64>> for &num_complex::Complex64 {
4690	type Output = SpecificHeatCapacity<num_complex::Complex64>;
4691	fn mul(self, rhs: &SpecificHeatCapacity<num_complex::Complex64>) -> Self::Output {
4692		SpecificHeatCapacity{J_per_kgK: self.clone() * rhs.J_per_kgK.clone()}
4693	}
4694}
4695
4696
4697
4698/// Converts a SpecificHeatCapacity into the equivalent [uom](https://crates.io/crates/uom) type [SpecificHeatCapacity](https://docs.rs/uom/0.34.0/uom/si/f32/type.SpecificHeatCapacity.html)
4699#[cfg(feature = "uom")]
4700impl<T> Into<uom::si::f32::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+Into<f32> {
4701	fn into(self) -> uom::si::f32::SpecificHeatCapacity {
4702		uom::si::f32::SpecificHeatCapacity::new::<uom::si::specific_heat_capacity::joule_per_kilogram_kelvin>(self.J_per_kgK.into())
4703	}
4704}
4705
4706/// Creates a SpecificHeatCapacity from the equivalent [uom](https://crates.io/crates/uom) type [SpecificHeatCapacity](https://docs.rs/uom/0.34.0/uom/si/f32/type.SpecificHeatCapacity.html)
4707#[cfg(feature = "uom")]
4708impl<T> From<uom::si::f32::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+From<f32> {
4709	fn from(src: uom::si::f32::SpecificHeatCapacity) -> Self {
4710		SpecificHeatCapacity{J_per_kgK: T::from(src.value)}
4711	}
4712}
4713
4714/// Converts a SpecificHeatCapacity into the equivalent [uom](https://crates.io/crates/uom) type [SpecificHeatCapacity](https://docs.rs/uom/0.34.0/uom/si/f64/type.SpecificHeatCapacity.html)
4715#[cfg(feature = "uom")]
4716impl<T> Into<uom::si::f64::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+Into<f64> {
4717	fn into(self) -> uom::si::f64::SpecificHeatCapacity {
4718		uom::si::f64::SpecificHeatCapacity::new::<uom::si::specific_heat_capacity::joule_per_kilogram_kelvin>(self.J_per_kgK.into())
4719	}
4720}
4721
4722/// Creates a SpecificHeatCapacity from the equivalent [uom](https://crates.io/crates/uom) type [SpecificHeatCapacity](https://docs.rs/uom/0.34.0/uom/si/f64/type.SpecificHeatCapacity.html)
4723#[cfg(feature = "uom")]
4724impl<T> From<uom::si::f64::SpecificHeatCapacity> for SpecificHeatCapacity<T> where T: NumLike+From<f64> {
4725	fn from(src: uom::si::f64::SpecificHeatCapacity) -> Self {
4726		SpecificHeatCapacity{J_per_kgK: T::from(src.value)}
4727	}
4728}
4729
4730
4731// SpecificHeatCapacity * InverseAbsorbedDose -> InverseTemperature
4732/// Multiplying a SpecificHeatCapacity by a InverseAbsorbedDose returns a value of type InverseTemperature
4733impl<T> core::ops::Mul<InverseAbsorbedDose<T>> for SpecificHeatCapacity<T> where T: NumLike {
4734	type Output = InverseTemperature<T>;
4735	fn mul(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
4736		InverseTemperature{per_K: self.J_per_kgK * rhs.per_Gy}
4737	}
4738}
4739/// Multiplying a SpecificHeatCapacity by a InverseAbsorbedDose returns a value of type InverseTemperature
4740impl<T> core::ops::Mul<InverseAbsorbedDose<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4741	type Output = InverseTemperature<T>;
4742	fn mul(self, rhs: InverseAbsorbedDose<T>) -> Self::Output {
4743		InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Gy}
4744	}
4745}
4746/// Multiplying a SpecificHeatCapacity by a InverseAbsorbedDose returns a value of type InverseTemperature
4747impl<T> core::ops::Mul<&InverseAbsorbedDose<T>> for SpecificHeatCapacity<T> where T: NumLike {
4748	type Output = InverseTemperature<T>;
4749	fn mul(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
4750		InverseTemperature{per_K: self.J_per_kgK * rhs.per_Gy.clone()}
4751	}
4752}
4753/// Multiplying a SpecificHeatCapacity by a InverseAbsorbedDose returns a value of type InverseTemperature
4754impl<T> core::ops::Mul<&InverseAbsorbedDose<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4755	type Output = InverseTemperature<T>;
4756	fn mul(self, rhs: &InverseAbsorbedDose<T>) -> Self::Output {
4757		InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Gy.clone()}
4758	}
4759}
4760
4761// SpecificHeatCapacity * InverseDoseEquivalent -> InverseTemperature
4762/// Multiplying a SpecificHeatCapacity by a InverseDoseEquivalent returns a value of type InverseTemperature
4763impl<T> core::ops::Mul<InverseDoseEquivalent<T>> for SpecificHeatCapacity<T> where T: NumLike {
4764	type Output = InverseTemperature<T>;
4765	fn mul(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
4766		InverseTemperature{per_K: self.J_per_kgK * rhs.per_Sv}
4767	}
4768}
4769/// Multiplying a SpecificHeatCapacity by a InverseDoseEquivalent returns a value of type InverseTemperature
4770impl<T> core::ops::Mul<InverseDoseEquivalent<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4771	type Output = InverseTemperature<T>;
4772	fn mul(self, rhs: InverseDoseEquivalent<T>) -> Self::Output {
4773		InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Sv}
4774	}
4775}
4776/// Multiplying a SpecificHeatCapacity by a InverseDoseEquivalent returns a value of type InverseTemperature
4777impl<T> core::ops::Mul<&InverseDoseEquivalent<T>> for SpecificHeatCapacity<T> where T: NumLike {
4778	type Output = InverseTemperature<T>;
4779	fn mul(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
4780		InverseTemperature{per_K: self.J_per_kgK * rhs.per_Sv.clone()}
4781	}
4782}
4783/// Multiplying a SpecificHeatCapacity by a InverseDoseEquivalent returns a value of type InverseTemperature
4784impl<T> core::ops::Mul<&InverseDoseEquivalent<T>> for &SpecificHeatCapacity<T> where T: NumLike {
4785	type Output = InverseTemperature<T>;
4786	fn mul(self, rhs: &InverseDoseEquivalent<T>) -> Self::Output {
4787		InverseTemperature{per_K: self.J_per_kgK.clone() * rhs.per_Sv.clone()}
4788	}
4789}
4790
4791// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4792/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4793impl<T> core::ops::Div<SpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
4794	type Output = InverseSpecificHeatCapacity<T>;
4795	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4796		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4797	}
4798}
4799/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4800impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
4801	type Output = InverseSpecificHeatCapacity<T>;
4802	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4803		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4804	}
4805}
4806/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4807impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for f64 where T: NumLike+From<f64> {
4808	type Output = InverseSpecificHeatCapacity<T>;
4809	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4810		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4811	}
4812}
4813/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4814impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &f64 where T: NumLike+From<f64> {
4815	type Output = InverseSpecificHeatCapacity<T>;
4816	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4817		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4818	}
4819}
4820
4821// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4822/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4823impl<T> core::ops::Div<SpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
4824	type Output = InverseSpecificHeatCapacity<T>;
4825	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4826		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4827	}
4828}
4829/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4830impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
4831	type Output = InverseSpecificHeatCapacity<T>;
4832	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4833		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4834	}
4835}
4836/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4837impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for f32 where T: NumLike+From<f32> {
4838	type Output = InverseSpecificHeatCapacity<T>;
4839	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4840		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4841	}
4842}
4843/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4844impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &f32 where T: NumLike+From<f32> {
4845	type Output = InverseSpecificHeatCapacity<T>;
4846	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4847		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4848	}
4849}
4850
4851// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4852/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4853impl<T> core::ops::Div<SpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
4854	type Output = InverseSpecificHeatCapacity<T>;
4855	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4856		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4857	}
4858}
4859/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4860impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
4861	type Output = InverseSpecificHeatCapacity<T>;
4862	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4863		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4864	}
4865}
4866/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4867impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for i64 where T: NumLike+From<i64> {
4868	type Output = InverseSpecificHeatCapacity<T>;
4869	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4870		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4871	}
4872}
4873/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4874impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &i64 where T: NumLike+From<i64> {
4875	type Output = InverseSpecificHeatCapacity<T>;
4876	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4877		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4878	}
4879}
4880
4881// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4882/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4883impl<T> core::ops::Div<SpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
4884	type Output = InverseSpecificHeatCapacity<T>;
4885	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4886		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4887	}
4888}
4889/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4890impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
4891	type Output = InverseSpecificHeatCapacity<T>;
4892	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4893		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4894	}
4895}
4896/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4897impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for i32 where T: NumLike+From<i32> {
4898	type Output = InverseSpecificHeatCapacity<T>;
4899	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4900		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4901	}
4902}
4903/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4904impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &i32 where T: NumLike+From<i32> {
4905	type Output = InverseSpecificHeatCapacity<T>;
4906	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4907		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4908	}
4909}
4910
4911// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4912/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4913#[cfg(feature="num-bigfloat")]
4914impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4915	type Output = InverseSpecificHeatCapacity<T>;
4916	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4917		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4918	}
4919}
4920/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4921#[cfg(feature="num-bigfloat")]
4922impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4923	type Output = InverseSpecificHeatCapacity<T>;
4924	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4925		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4926	}
4927}
4928/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4929#[cfg(feature="num-bigfloat")]
4930impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4931	type Output = InverseSpecificHeatCapacity<T>;
4932	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4933		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4934	}
4935}
4936/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4937#[cfg(feature="num-bigfloat")]
4938impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_bigfloat::BigFloat where T: NumLike+From<num_bigfloat::BigFloat> {
4939	type Output = InverseSpecificHeatCapacity<T>;
4940	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4941		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4942	}
4943}
4944
4945// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4946/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4947#[cfg(feature="num-complex")]
4948impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4949	type Output = InverseSpecificHeatCapacity<T>;
4950	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4951		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4952	}
4953}
4954/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4955#[cfg(feature="num-complex")]
4956impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4957	type Output = InverseSpecificHeatCapacity<T>;
4958	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4959		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4960	}
4961}
4962/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4963#[cfg(feature="num-complex")]
4964impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4965	type Output = InverseSpecificHeatCapacity<T>;
4966	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4967		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
4968	}
4969}
4970/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4971#[cfg(feature="num-complex")]
4972impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_complex::Complex32 where T: NumLike+From<num_complex::Complex32> {
4973	type Output = InverseSpecificHeatCapacity<T>;
4974	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
4975		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
4976	}
4977}
4978
4979// 1/SpecificHeatCapacity -> InverseSpecificHeatCapacity
4980/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4981#[cfg(feature="num-complex")]
4982impl<T> core::ops::Div<SpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4983	type Output = InverseSpecificHeatCapacity<T>;
4984	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4985		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK}
4986	}
4987}
4988/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4989#[cfg(feature="num-complex")]
4990impl<T> core::ops::Div<SpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4991	type Output = InverseSpecificHeatCapacity<T>;
4992	fn div(self, rhs: SpecificHeatCapacity<T>) -> Self::Output {
4993		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK}
4994	}
4995}
4996/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
4997#[cfg(feature="num-complex")]
4998impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
4999	type Output = InverseSpecificHeatCapacity<T>;
5000	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
5001		InverseSpecificHeatCapacity{kgK_per_J: T::from(self) / rhs.J_per_kgK.clone()}
5002	}
5003}
5004/// Dividing a scalar value by a SpecificHeatCapacity unit value returns a value of type InverseSpecificHeatCapacity
5005#[cfg(feature="num-complex")]
5006impl<T> core::ops::Div<&SpecificHeatCapacity<T>> for &num_complex::Complex64 where T: NumLike+From<num_complex::Complex64> {
5007	type Output = InverseSpecificHeatCapacity<T>;
5008	fn div(self, rhs: &SpecificHeatCapacity<T>) -> Self::Output {
5009		InverseSpecificHeatCapacity{kgK_per_J: T::from(self.clone()) / rhs.J_per_kgK.clone()}
5010	}
5011}
5012
5013
5014