in bindings/python/src/lib.rs [399:422]
fn from_string(string: &str) -> Result<Self, String> {
let mut parts = string.split('.');
let err = || format!("Could not parse torch package version {string}.");
let major_str = parts.next().ok_or_else(err)?;
let minor_str = parts.next().ok_or_else(err)?;
let patch_str = parts.next().ok_or_else(err)?;
// Patch is more complex and can be:
// - `1` a number
// - `1a0`, `1b0`, `1rc1` an alpha, beta, release candidate version
// - `1a0+git2323` from source with commit number
let patch_str: String = patch_str
.chars()
.take_while(|c| c.is_ascii_digit())
.collect();
let major = major_str.parse().map_err(|_| err())?;
let minor = minor_str.parse().map_err(|_| err())?;
let patch = patch_str.parse().map_err(|_| err())?;
Ok(Version {
major,
minor,
patch,
})
}