############################################
#
#    dolfin.cpp.fem
# https://fenicsproject.org/docs/dolfin/latest/python/_autogenerated/dolfin.cpp.fem.html
#
#    dolfin.fem module
# https://fenicsproject.org/docs/dolfin/2017.2.0/python/programmers-reference/fem/index.html
#
############################################

@pyclass dolfin LinearVariationalProblem
@pyclass dolfin LinearVariationalSolver
@pyclass dolfin NonlinearVariationalProblem
@pyclass dolfin NonlinearVariationalSolver
@pyclass dolfin LocalSolver
@pyclass dolfin DirichletBC
@pyclass dolfin MultiMeshDirichletBC
@pyclass dolfin AutoSubDomain
@pyclass dolfin Assembler
@pyclass dolfin SystemAssembler
@pyclass dolfin MultiMeshAssembler
@pyclass dolfin DofMap
@pyclass dolfin DiscreteOperators
@pyclass dolfin PETScDMCollection
@pyclass dolfin PointSource
@pyclass dolfin SparsityPatternBuilder

@pyfunc dolfin assemble
@pyfunc dolfin assemble_system
@pyfunc dolfin assemble_local
@pyfunc dolfin errornorm
@pyfunc dolfin project
@pyfunc dolfin solve
@pyfunc dolfin adapt
@pyfunc dolfin create_mesh
@pyfunc dolfin dof_to_vertex_map
@pyfunc dolfin get_coordinates
@pyfunc dolfin set_coordinates
@pyfunc dolfin vertex_to_dof_map

export LinearVariationalProblem, LinearVariationalSolver, NonlinearVariationalProblem, 
       NonlinearVariationalSolver, LocalSolver, DirichletBC, MultiMeshDirichletBC, 
       AutoSubDomain, Assembler, SystemAssembler, MultiMeshAssembler, DofMap, 
       DiscreteOperators, PETScDMCollection, PointSource, SparsityPatternBuilder, 
       assemble, assemble_system, assemble_local, errornorm, project, solve, 
       adapt, create_mesh, dof_to_vertex_map, get_coordinates, set_coordinates, 
       vertex_to_dof_map


############################################
#
#    ufl.finiteelement
#
# https://fenicsproject.org/docs/ufl/1.6.0/ufl.finiteelement.html
#
############################################

@pyclass ufl FiniteElementBase
@pyclass ufl FiniteElement FiniteElementBase

@pyclass ufl MixedElement FiniteElementBase
@pyclass ufl VectorElement MixedElement
@pyclass ufl TensorElement MixedElement

@pyclass ufl EnrichedElement FiniteElementBase
@pyclass ufl RestrictedElement FiniteElementBase
@pyclass ufl TensorProductElement FiniteElementBase

# OuterProductElement:  no need to export
# OuterProductElement:  not exported in `ufl`
@pyclass ufl OuterProductElement FiniteElementBase

# 暂时没搞懂，先注释掉
#@pyclass ufl HDiv OuterProductElement
#@pyclass ufl HCurl OuterProductElement

# no need to export
# not exported in `ufl`
@pyclass ufl OuterProductVectorElement MixedElement
@pyclass ufl TraceElement FiniteElementBase

@pyclass ufl BrokenElement FiniteElementBase

@pyfunc ufl FacetElement
@pyfunc ufl InteriorElement

*(fe1::FiniteElementBase, fe2::FiniteElementBase) = FiniteElementBase(fe1.pyobject * fe2.pyobject)

export FiniteElementBase, FiniteElement, MixedElement, VectorElement, TensorElement, EnrichedElement,
        RestrictedElement, TensorProductElement, BrokenElement, FacetElement, InteriorElement


############################################
#
#    dolfin.cpp.adaptivity
#
# https://fenicsproject.org/docs/dolfin/2018.1.0/python/_autogenerated/dolfin.cpp.adaptivity.html?highlight=timeseries#dolfin.cpp.adaptivity.TimeSeries
#
############################################

# no need to export
# not exported in `dolfin` or `ufl`
@pyclass dolfin GoalFunctional Form
@pyclass dolfin ErrorControl Variable
@pyclass dolfin GenericAdaptiveVariationalSolver Variable

@pyclass dolfin TimeSeries Variable
@pyclass dolfin AdaptiveLinearVariationalSolver GenericAdaptiveVariationalSolver
@pyclass dolfin AdaptiveNonlinearVariationalSolver GenericAdaptiveVariationalSolver

export TimeSeries, AdaptiveLinearVariationalSolver, AdaptiveNonlinearVariationalSolver 



