' Licensed to the Apache Software Foundation (ASF) under one or more
' contributor license agreements.  See the NOTICE file distributed with
' this work for additional information regarding copyright ownership.
' The ASF licenses this file to You under the Apache License, Version 2.0
' (the "License"); you may not use this file except in compliance with
' the License.  You may obtain a copy of the License at
'
'      http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing, software
' distributed under the License is distributed on an "AS IS" BASIS,
' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' See the License for the specific language governing permissions and
' limitations under the License.

@startuml

  skinparam svek                  true
  skinparam ClassBackgroundColor  #F3EFEB
  skinparam ClassArrowColor       #691616
  skinparam ClassBorderColor      #691616
  skinparam NoteBackgroundColor   #F3EFEB
  skinparam NoteBorderColor       #691616
  skinparam NoteFontColor         #691616
  skinparam ClassFontSize         11

  package org.apache.commons.math4.geometry #ECEBD8 {

    interface Space {
      +int getDimension()
      +Space getSubSpace()
    }
    note top
      Space is mainly used as a parameter
      for generics and to link d-dimensional
      space with (d-1)-dimensional space
    end note

    interface "Vector<S extends Space>" as Vector_S_ {
      +Space getSpace()
      +Vector getZero()
      +double getNorm()
      +Vector add()
      +Vector subtract()
      +Vector negate()
      +Vector normalize()
      +Vector scalarMultiply()
      +boolean isNaN()
      +boolean isInfinite()
      +double distance()
      +double dotProduct()
    }

    Space <-- Vector_S_

    package partitioning #DDEBD8 {
      interface "Region<S extends Space>" as Region_S_
      interface "Hyperplane<S extends Space>" as Hyperplane_S_
      interface "SubHyperplane<S extends Space>" as SubHyperplane_S_
    }

    package euclidean #DDEBD8 {

      package threed #DDDBD8 {

        class Euclidean3D
        class Cartesian3D
        class Line
        class SubLine
        class Plane
        class SubPlane
        class PolyhedronsSet

        Space            <|.. Euclidean3D
        Vector_S_        <|.. Cartesian3D
        Hyperplane_S_    <|.. Plane
        SubHyperplane_S_ <|.. SubPlane
        Region_S_        <|.. PolyhedronsSet

      }

    }

  }

@enduml
