class_docstr: The state of the first dataset steps.
code: def __post_init__(self) -> None:
      with StepProfiler(
          method="FirstStepsDatasetState.__post_init__",
          step="get_dataset_level_artifact_states",
          context=f"dataset={self.dataset}",
      ):
          self.artifact_state_by_step = {
              processing_step.name: ArtifactState(
                  processing_step=processing_step,
                  dataset=self.dataset,
                  revision=self.revision,
                  config=None,
                  split=None,
                  pending_jobs_df=self.pending_jobs_df[
                      (
                          self.pending_jobs_df["revision"]
                          == self.revision
                      )
                      & (self.pending_jobs_df["config"].isnull())
                      & (self.pending_jobs_df["split"].isnull())
                      & (
                          self.pending_jobs_df["type"]
                          == processing_step.job_type
                      )
                  ],
                  cache_entries_df=self.cache_entries_df[
                      (
                          self.cache_entries_df["kind"]
                          == processing_step.cache_kind
                      )
                      & (self.cache_entries_df["config"].isnull())
                      & (self.cache_entries_df["split"].isnull())
                  ],
              )
              for processing_step in self.processing_graph.get_first_processing_steps()
          }
  
          self.config_names = []
          self.config_states = []
  
imports: import logging
  from dataclasses import dataclass, field
  from typing import Optional
  import pandas
  from libcommon.constants import CONFIG_SPLIT_NAMES_KINDS, DATASET_CONFIG_NAMES_KINDS, ERROR_CODES_TO_RETRY, MAX_FAILED_RUNS
  from libcommon.processing_graph import Artifact, ProcessingGraph
  from libcommon.prometheus import StepProfiler
  from libcommon.simple_cache import CacheEntryMetadata, fetch_names
label_desc: Use image node_id 1 for calling the FirstStepsDatasetState obj's underlying member method code with example usage: obj.__post_init__() without return types