Source code for snowprofile.snowprofile

# -*- coding: utf-8 -*-

import typing

import pydantic

from snowprofile.classes import Time, Observer, Location, Weather, SurfaceConditions, Environment
from snowprofile.profiles import Stratigraphy, TemperatureProfile, DensityProfile, LWCProfile, \
    SSAProfile, SSAPointProfile, HardnessProfile, HardnessPointProfile, \
    StrengthProfile, ImpurityProfile, ScalarProfile, VectorialProfile
from snowprofile.stability_tests import CTStabilityTest, ECTStabilityTest, RBStabilityTest, PSTStabilityTest, \
    ShearFrameStabilityTest
from snowprofile._base_classes import AdditionalData, BaseMergeable

__all__ = ['SnowProfile']


[docs] class SnowProfile(pydantic.BaseModel, BaseMergeable): """ The base class for representing and handling a snow profile. Data content ^^^^^^^^^^^^ General information on snow profile and snow pit '''''''''''''''''''''''''''''''''''''''''''''''' id A unique id to identify the snow profile (optional, str, only [a-zA-Z0-9-]) comment General comment on the overall measurement (optional, str) profile_comment General comment on the snow profile (optional, str) time Time of observation (:py:class:`snowprofile.classes.Time` object) observer Observer information (:py:class:`snowprofile.classes.Observer` object) location Location information (:py:class:`snowprofile.classes.Location` object) weather Weather observations (:py:class:`snowprofile.classes.Weather` object) surface_conditions Surface conditions (penetration depths, surface features, wind surface features, etc.) (:py:class:`snowprofile.classes.SurfaceConditions` object) profile_depth Depth of the profile (m) profile_depth_std Standard deviation of the profile depth around the snow pit (in case of multiple measurements, m) profile_swe Total SWE (mm or kg/m2) profile_swe_std Standard deviation of the total SWE (in case of mutilple measurements, mm or kg/m2) new_snow_24_depth Depth of the new snow from the past 24h (m) new_snow_24_depth_std Standard deviation of the depth of new snow (in case of multiple measurements, m) new_snow_24_swe SWE of the new snow from the past 24h (mm or kg/m2) new_snow_24_swe_std Standard deviation of the SWE of the new snow from the past 24h (in case of mutilple measurements, mm or kg/m2) snow_transport Presence and type of snow transport - No snow transport - Modified saltation: snow transport that remains confined close to the ground - Drifting snow: transport up to 6ft/2m - Blowing snow: transport above 6ft/2m snow_transport_occurence_24: typing.Optional[float] = pydantic.Field(None, ge=0, le=100) Profiles data ''''''''''''' stratigraphy_profile The stratigraphy profile (unique, :py:class:`snowprofile.profiles.Stratigraphy` object) temperature_profiles: Temperature profiles (list of :py:class:`snowprofile.profiles.TemperatureProfile` objects) density_profiles: Density profiles (list of :py:class:`snowprofile.profiles.DensityProfile` objects) lwc_profiles: LWC profiles (list of :py:class:`snowprofile.profiles.LWCProfile` objects) ssa_profiles: SSA profiles (list of :py:class:`snowprofile.profiles.SSAProfile` or :py:class:`snowprofile.profiles.SSAPointProfile` objects) hardness_profiles: Hardness profiles (list of :py:class:`snowprofile.profiles.HardnessProfile` or :py:class:`snowprofile.profiles.HardnessPointProfile` objects) strength_profiles: Strength profiles (list of :py:class:`snowprofile.profiles.StrengthProfile` objects) impurity_profiles: Impurity profiles (list of :py:class:`snowprofile.profiles.ImpurityProfile` objects) stability_tests: List of stabilty tests. See :ref:`Stability tests` for details. Other data '''''''''' application Information on the application or code that generated the profile (optional, str) application_version Version of the application or code that generated the profile (optional, str) profiles_comment Comment associated to profiles, for CAAML compatibility only, do not use (str) additional_data and profile_additional_data Room to store additional data for CAAML compatibility (customData), do not use. """ model_config = pydantic.ConfigDict( validate_assignment=True, extra='forbid') id: typing.Optional[str] = None comment: typing.Optional[str] = None profile_comment: typing.Optional[str] = None time: Time = Time() observer: Observer = Observer() location: Location = Location(name='Unknown') environment: Environment = Environment() application: typing.Optional[str] = 'snowprofile' application_version: typing.Optional[str] = None profile_depth: typing.Optional[float] = pydantic.Field(None, ge=0) profile_depth_std: typing.Optional[float] = pydantic.Field(None, ge=0) profile_swe: typing.Optional[float] = pydantic.Field(None, ge=0) profile_swe_std: typing.Optional[float] = pydantic.Field(None, ge=0) new_snow_24_depth: typing.Optional[float] = pydantic.Field(None, ge=0) new_snow_24_depth_std: typing.Optional[float] = pydantic.Field(None, ge=0) new_snow_24_swe: typing.Optional[float] = pydantic.Field(None, ge=0) new_snow_24_swe_std: typing.Optional[float] = pydantic.Field(None, ge=0) snow_transport: typing.Optional[typing.Literal[ 'No snow transport', 'Modified saltation', 'Drifting snow', 'Blowing snow']] = None snow_transport_occurence_24: typing.Optional[float] = pydantic.Field(None, ge=0, le=100) weather: Weather = Weather() surface_conditions: SurfaceConditions = SurfaceConditions() stratigraphy_profile: typing.Optional[Stratigraphy] = None temperature_profiles: typing.List[TemperatureProfile] = [] density_profiles: typing.List[DensityProfile] = [] lwc_profiles: typing.List[LWCProfile] = [] ssa_profiles: typing.List[SSAProfile | SSAPointProfile] = [] hardness_profiles: typing.List[HardnessProfile | HardnessPointProfile] = [] strength_profiles: typing.List[StrengthProfile] = [] impurity_profiles: typing.List[ImpurityProfile] = [] other_scalar_profiles: typing.List[ScalarProfile] = [] other_vectorial_profiles: typing.List[VectorialProfile] = [] stability_tests: typing.List[ CTStabilityTest | ECTStabilityTest | RBStabilityTest | PSTStabilityTest | ShearFrameStabilityTest] = [] additional_data: typing.Optional[AdditionalData] = None profile_additional_data: typing.Optional[AdditionalData] = None