network_configuration_m.f90 Source File


Files dependent on this one

sourcefile~~network_configuration_m.f90~~AfferentGraph sourcefile~network_configuration_m.f90 network_configuration_m.f90 sourcefile~inference_engine_m.f90 inference_engine_m.f90 sourcefile~inference_engine_m.f90->sourcefile~network_configuration_m.f90 sourcefile~training_configuration_m.f90 training_configuration_m.f90 sourcefile~inference_engine_m.f90->sourcefile~training_configuration_m.f90 sourcefile~trainable_engine_m.f90 trainable_engine_m.F90 sourcefile~inference_engine_m.f90->sourcefile~trainable_engine_m.f90 sourcefile~network_configuration_s.f90 network_configuration_s.F90 sourcefile~network_configuration_s.f90->sourcefile~network_configuration_m.f90 sourcefile~training_configuration_m.f90->sourcefile~network_configuration_m.f90 sourcefile~concurrent-inferences.f90 concurrent-inferences.f90 sourcefile~concurrent-inferences.f90->sourcefile~inference_engine_m.f90 sourcefile~learn-addition.f90 learn-addition.F90 sourcefile~learn-addition.f90->sourcefile~inference_engine_m.f90 sourcefile~learn-exponentiation.f90 learn-exponentiation.F90 sourcefile~learn-exponentiation.f90->sourcefile~inference_engine_m.f90 sourcefile~learn-microphysics-procedures.f90 learn-microphysics-procedures.F90 sourcefile~learn-microphysics-procedures.f90->sourcefile~inference_engine_m.f90 sourcefile~thompson_tensors_m.f90 thompson_tensors_m.f90 sourcefile~learn-microphysics-procedures.f90->sourcefile~thompson_tensors_m.f90 sourcefile~learn-multiplication.f90 learn-multiplication.F90 sourcefile~learn-multiplication.f90->sourcefile~inference_engine_m.f90 sourcefile~learn-power-series.f90 learn-power-series.F90 sourcefile~learn-power-series.f90->sourcefile~inference_engine_m.f90 sourcefile~learn-saturated-mixing-ratio.f90 learn-saturated-mixing-ratio.F90 sourcefile~learn-saturated-mixing-ratio.f90->sourcefile~inference_engine_m.f90 sourcefile~saturated_mixing_ratio_m.f90 saturated_mixing_ratio_m.f90 sourcefile~learn-saturated-mixing-ratio.f90->sourcefile~saturated_mixing_ratio_m.f90 sourcefile~print-training-configuration.f90 print-training-configuration.F90 sourcefile~print-training-configuration.f90->sourcefile~inference_engine_m.f90 sourcefile~saturated_mixing_ratio_m.f90->sourcefile~inference_engine_m.f90 sourcefile~thompson_tensors_m.f90->sourcefile~inference_engine_m.f90 sourcefile~train-and-write.f90 train-and-write.F90 sourcefile~train-and-write.f90->sourcefile~inference_engine_m.f90 sourcefile~trainable_engine_m.f90->sourcefile~training_configuration_m.f90 sourcefile~training_configuration_s.f90 training_configuration_s.F90 sourcefile~training_configuration_s.f90->sourcefile~inference_engine_m.f90 sourcefile~training_configuration_s.f90->sourcefile~training_configuration_m.f90 sourcefile~write-read-infer.f90 write-read-infer.F90 sourcefile~write-read-infer.f90->sourcefile~inference_engine_m.f90 sourcefile~trainable_engine_s.f90 trainable_engine_s.F90 sourcefile~trainable_engine_s.f90->sourcefile~trainable_engine_m.f90

Source Code

module network_configuration_m
  use sourcery_string_m, only : string_t
  implicit none

  private
  public :: network_configuration_t

  type network_configuration_t
    private
    logical :: skip_connections_ = .false.
    integer, allocatable :: nodes_per_layer_(:)
    character(len=:), allocatable :: activation_name_
  contains
    procedure :: to_json
    procedure :: equals
    generic :: operator(==) => equals
    procedure :: activation_name
    procedure :: nodes_per_layer
    procedure :: skip_connections
  end type

  interface network_configuration_t

    pure module function from_json(lines) result(network_configuration)
      implicit none
      type(string_t), intent(in) :: lines(:)
      type(network_configuration_t) network_configuration
    end function

    pure module function from_components(skip_connections, nodes_per_layer, activation_name) result(network_configuration)
      implicit none
      logical, intent(in) :: skip_connections
      integer, intent(in) :: nodes_per_layer(:)
      character(len=*), intent(in) :: activation_name
      type(network_configuration_t) network_configuration
    end function

  end interface

  interface

    pure module function to_json(self) result(lines)
      implicit none
      class(network_configuration_t), intent(in) :: self
      type(string_t), allocatable :: lines(:)
    end function

    elemental module function equals(lhs, rhs) result(lhs_equals_rhs)
      implicit none
      class(network_configuration_t), intent(in) :: lhs, rhs
      logical lhs_equals_rhs
    end function

    elemental module function activation_name(self) result(string)
      implicit none
      class(network_configuration_t), intent(in) :: self
      type(string_t) string
    end function

    pure module function nodes_per_layer(self) result(nodes)
      implicit none
      class(network_configuration_t), intent(in) :: self
      integer, allocatable :: nodes(:)
    end function

    elemental module function skip_connections(self) result(using_skip)
      implicit none
      class(network_configuration_t), intent(in) :: self
      logical using_skip
    end function


  end interface

end module