#ifndef GUARD_d4b9ca85d48735ee01f395a42eaa0cee
#define GUARD_d4b9ca85d48735ee01f395a42eaa0cee

#define USING_DUNE_PYTHON 1
#include <config.h>
#include <dune/alugrid/dgf.hh>
#include <dune/alugrid/grid.hh>
#include <dune/fem/gridpart/adaptiveleafgridpart.hh>
#include <dune/fempy/py/gridview.hh>
#include <dune/python/grid/gridview.hh>
#include <dune/python/grid/hierarchical.hh>
#include <dune/fem/function/localfunction/bindable.hh>
#include <dune/fem/common/intersectionside.hh>
#include <dune/python/pybind11/pybind11.h>
#include <dune/python/pybind11/extensions.h>
#include <dune/fempy/py/grid/gridpart.hh>
#include <dune/common/exceptions.hh>
#include <dune/fempy/py/ufllocalfunction.hh>

namespace UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee
{

  // UFLLocalFunction
// ----------------

template< class GridPart >
struct UFLLocalFunction
  : public Dune::Fem::BindableGridFunctionWithSpace<GridPart,Dune::Dim<1>>
{
  typedef GridPart GridPartType;
  typedef typename GridPartType::GridViewType GridView;
  typedef typename GridView::ctype ctype;
  typedef Dune::Fem::BindableGridFunctionWithSpace<GridPart,Dune::Dim<1>> BaseType;
  typedef Dune::Fem::GridFunctionSpace<GridPartType,Dune::Dim<1>> FunctionSpaceType;
  typedef typename GridPartType::template Codim< 0 >::EntityType EntityType;
  typedef typename GridPartType::IntersectionType IntersectionType;
  typedef typename EntityType::Geometry Geometry;
  typedef typename Geometry::GlobalCoordinate GlobalCoordinateType;
  typedef Dune::Fem::IntersectionSide Side;
  typedef double Conepsilon;
  typedef std::tuple< std::shared_ptr< Conepsilon > > ConstantTupleType;
  template< std::size_t i >
  using ConstantsRangeType = typename std::tuple_element_t< i, ConstantTupleType >::element_type;
  typedef std::tuple<> CoefficientTupleType;
  static constexpr bool gridPartValid = true;
  template< std::size_t i >
  using CoefficientType = std::tuple_element_t< i, CoefficientTupleType >;
  template< std::size_t i >
  using ConstantType = typename std::tuple_element_t< i, ConstantTupleType >::element_type;
  using BaseType::entity;
  using BaseType::geometry;

  UFLLocalFunction ( const GridPartType &gridPart, const std::string &name, int order, const Dune::Fem::ParameterReader &parameter = Dune::Fem::Parameter::container() )
    : BaseType(gridPart,name,order)
  {
    std::get< 0 >( constants_ ) = std::make_shared< Conepsilon >( (Conepsilon(0)) );
  }

  void bind ( const IntersectionType &intersection, Side side )
  {
    BaseType::bind(intersection, side);
  }

  void bind ( const EntityType &entity )
  {
    BaseType::bind(entity);
  }

  void unbind ()
  {
    BaseType::unbind();
  }

  template< class Point >
  void evaluate ( const Point &x, typename FunctionSpaceType::RangeType &result ) const
  {
    using std::max;
    using std::min;
    using std::sqrt;
    using std::tanh;
    double tmp0 = constant< 0 >();
    GlobalCoordinateType tmp1 = geometry().global( Dune::Fem::coordinate( x ) );
    const auto tmp2 = -0.4 + tmp1[ 0 ];
    const auto tmp3 = tmp1[ 1 ] * tmp1[ 1 ];
    const auto tmp4 = tmp1[ 0 ] * tmp1[ 0 ];
    const auto tmp5 = tmp4 + tmp3;
    const auto tmp6 = 1e-10 + tmp5;
    const auto tmp7 = std::sqrt( tmp6 );
    const auto tmp8 = -1.4 + tmp7;
    const auto tmp9 = std::min( tmp8, tmp2 );
    const auto tmp10 = -1 * tmp1[ 0 ];
    const auto tmp11 = -0.4 + tmp10;
    const auto tmp12 = std::min( tmp8, tmp11 );
    const auto tmp13 = std::max( tmp12, tmp9 );
    const auto tmp14 = 1 + tmp1[ 0 ];
    const auto tmp15 = tmp14 * tmp14;
    const auto tmp16 = tmp3 + tmp15;
    const auto tmp17 = 1e-10 + tmp16;
    const auto tmp18 = std::sqrt( tmp17 );
    const auto tmp19 = -0.5 + tmp18;
    const auto tmp20 = -1 + tmp1[ 0 ];
    const auto tmp21 = tmp20 * tmp20;
    const auto tmp22 = tmp3 + tmp21;
    const auto tmp23 = 1e-10 + tmp22;
    const auto tmp24 = std::sqrt( tmp23 );
    const auto tmp25 = -0.5 + tmp24;
    const auto tmp26 = 0.8 + tmp1[ 1 ];
    const auto tmp27 = tmp26 * tmp26;
    const auto tmp28 = tmp4 + tmp27;
    const auto tmp29 = 1e-10 + tmp28;
    const auto tmp30 = std::sqrt( tmp29 );
    const auto tmp31 = -0.5 + tmp30;
    const auto tmp32 = -1 * tmp31;
    const auto tmp33 = -0.8 + tmp1[ 1 ];
    const auto tmp34 = tmp33 * tmp33;
    const auto tmp35 = tmp4 + tmp34;
    const auto tmp36 = 1e-10 + tmp35;
    const auto tmp37 = std::sqrt( tmp36 );
    const auto tmp38 = -0.5 + tmp37;
    const auto tmp39 = -1 * tmp38;
    const auto tmp40 = -1 + tmp7;
    const auto tmp41 = std::max( tmp40, tmp39 );
    const auto tmp42 = std::max( tmp41, tmp32 );
    const auto tmp43 = std::min( tmp42, tmp25 );
    const auto tmp44 = std::min( tmp43, tmp19 );
    const auto tmp45 = std::max( tmp44, tmp13 );
    const auto tmp46 = 3 * tmp45;
    const auto tmp47 = tmp46 / tmp0;
    const auto tmp48 = std::tanh( tmp47 );
    const auto tmp49 = -1 * tmp48;
    const auto tmp50 = 1 + tmp49;
    const auto tmp51 = 0.5 * tmp50;
    const auto tmp52 = -1 * tmp51;
    const auto tmp53 = 1 + tmp52;
    const auto tmp54 = tmp53 * tmp51;
    result[ 0 ] = tmp54;
  }

  template< class Point >
  void jacobian ( const Point &x, typename FunctionSpaceType::JacobianRangeType &result ) const
  {
    using std::cosh;
    using std::max;
    using std::min;
    using std::pow;
    using std::sqrt;
    using std::tanh;
    double tmp0 = constant< 0 >();
    GlobalCoordinateType tmp1 = geometry().global( Dune::Fem::coordinate( x ) );
    const auto tmp2 = -0.4 + tmp1[ 0 ];
    const auto tmp3 = tmp1[ 1 ] * tmp1[ 1 ];
    const auto tmp4 = tmp1[ 0 ] * tmp1[ 0 ];
    const auto tmp5 = tmp4 + tmp3;
    const auto tmp6 = 1e-10 + tmp5;
    const auto tmp7 = std::sqrt( tmp6 );
    const auto tmp8 = -1.4 + tmp7;
    const auto tmp9 = std::min( tmp8, tmp2 );
    const auto tmp10 = -1 * tmp1[ 0 ];
    const auto tmp11 = -0.4 + tmp10;
    const auto tmp12 = std::min( tmp8, tmp11 );
    const auto tmp13 = std::max( tmp12, tmp9 );
    const auto tmp14 = 1 + tmp1[ 0 ];
    const auto tmp15 = tmp14 * tmp14;
    const auto tmp16 = tmp3 + tmp15;
    const auto tmp17 = 1e-10 + tmp16;
    const auto tmp18 = std::sqrt( tmp17 );
    const auto tmp19 = -0.5 + tmp18;
    const auto tmp20 = -1 + tmp1[ 0 ];
    const auto tmp21 = tmp20 * tmp20;
    const auto tmp22 = tmp3 + tmp21;
    const auto tmp23 = 1e-10 + tmp22;
    const auto tmp24 = std::sqrt( tmp23 );
    const auto tmp25 = -0.5 + tmp24;
    const auto tmp26 = 0.8 + tmp1[ 1 ];
    const auto tmp27 = tmp26 * tmp26;
    const auto tmp28 = tmp4 + tmp27;
    const auto tmp29 = 1e-10 + tmp28;
    const auto tmp30 = std::sqrt( tmp29 );
    const auto tmp31 = -0.5 + tmp30;
    const auto tmp32 = -1 * tmp31;
    const auto tmp33 = -0.8 + tmp1[ 1 ];
    const auto tmp34 = tmp33 * tmp33;
    const auto tmp35 = tmp4 + tmp34;
    const auto tmp36 = 1e-10 + tmp35;
    const auto tmp37 = std::sqrt( tmp36 );
    const auto tmp38 = -0.5 + tmp37;
    const auto tmp39 = -1 * tmp38;
    const auto tmp40 = -1 + tmp7;
    const auto tmp41 = std::max( tmp40, tmp39 );
    const auto tmp42 = std::max( tmp41, tmp32 );
    const auto tmp43 = std::min( tmp42, tmp25 );
    const auto tmp44 = std::min( tmp43, tmp19 );
    const auto tmp45 = std::max( tmp44, tmp13 );
    const auto tmp46 = 3 * tmp45;
    const auto tmp47 = tmp46 / tmp0;
    const auto tmp48 = 2.0 * tmp47;
    const auto tmp49 = std::cosh( tmp48 );
    const auto tmp50 = 1.0 + tmp49;
    const auto tmp51 = std::cosh( tmp47 );
    const auto tmp52 = 2.0 * tmp51;
    const auto tmp53 = tmp52 / tmp50;
    const auto tmp54 = std::pow( tmp53, 2 );
    const auto tmp55 = 2 * tmp7;
    const auto tmp56 = tmp1[ 0 ] + tmp1[ 0 ];
    const auto tmp57 = tmp56 / tmp55;
    const auto tmp58 = tmp57 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp59 = 2 * tmp37;
    const auto tmp60 = tmp56 / tmp59;
    const auto tmp61 = -1 * tmp60;
    const auto tmp62 = -1 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp63 = 1.0 + tmp62;
    const auto tmp64 = tmp63 * tmp61;
    const auto tmp65 = tmp64 + tmp58;
    const auto tmp66 = tmp65 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp67 = 2 * tmp30;
    const auto tmp68 = tmp56 / tmp67;
    const auto tmp69 = -1 * tmp68;
    const auto tmp70 = -1 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp71 = 1.0 + tmp70;
    const auto tmp72 = tmp71 * tmp69;
    const auto tmp73 = tmp72 + tmp66;
    const auto tmp74 = tmp73 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp75 = 2 * tmp24;
    const auto tmp76 = tmp20 + tmp20;
    const auto tmp77 = tmp76 / tmp75;
    const auto tmp78 = -1 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp79 = 1.0 + tmp78;
    const auto tmp80 = tmp79 * tmp77;
    const auto tmp81 = tmp80 + tmp74;
    const auto tmp82 = tmp81 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp83 = 2 * tmp18;
    const auto tmp84 = tmp14 + tmp14;
    const auto tmp85 = tmp84 / tmp83;
    const auto tmp86 = -1 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp87 = 1.0 + tmp86;
    const auto tmp88 = tmp87 * tmp85;
    const auto tmp89 = tmp88 + tmp82;
    const auto tmp90 = tmp89 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp91 = -1 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp92 = 1.0 + tmp91;
    const auto tmp93 = tmp57 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp94 = -1 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp95 = 1.0 + tmp94;
    const auto tmp96 = -1 * tmp95;
    const auto tmp97 = tmp96 + tmp93;
    const auto tmp98 = tmp97 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp99 = -1 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp100 = 1.0 + tmp99;
    const auto tmp101 = tmp57 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp102 = -1 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp103 = 1.0 + tmp102;
    const auto tmp104 = tmp103 + tmp101;
    const auto tmp105 = tmp104 * tmp100;
    const auto tmp106 = tmp105 + tmp98;
    const auto tmp107 = tmp106 * tmp92;
    const auto tmp108 = tmp107 + tmp90;
    const auto tmp109 = 3 * tmp108;
    const auto tmp110 = tmp109 / tmp0;
    const auto tmp111 = tmp110 * tmp54;
    const auto tmp112 = -1 * tmp111;
    const auto tmp113 = 0.5 * tmp112;
    const auto tmp114 = std::tanh( tmp47 );
    const auto tmp115 = -1 * tmp114;
    const auto tmp116 = 1 + tmp115;
    const auto tmp117 = 0.5 * tmp116;
    const auto tmp118 = -1 * tmp117;
    const auto tmp119 = 1 + tmp118;
    const auto tmp120 = tmp119 * tmp113;
    const auto tmp121 = -1 * tmp113;
    const auto tmp122 = tmp117 * tmp121;
    const auto tmp123 = tmp122 + tmp120;
    const auto tmp124 = tmp1[ 1 ] + tmp1[ 1 ];
    const auto tmp125 = tmp124 / tmp55;
    const auto tmp126 = tmp125 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp127 = tmp33 + tmp33;
    const auto tmp128 = tmp127 / tmp59;
    const auto tmp129 = -1 * tmp128;
    const auto tmp130 = tmp63 * tmp129;
    const auto tmp131 = tmp130 + tmp126;
    const auto tmp132 = tmp131 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp133 = tmp26 + tmp26;
    const auto tmp134 = tmp133 / tmp67;
    const auto tmp135 = -1 * tmp134;
    const auto tmp136 = tmp71 * tmp135;
    const auto tmp137 = tmp136 + tmp132;
    const auto tmp138 = tmp137 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp139 = tmp124 / tmp75;
    const auto tmp140 = tmp79 * tmp139;
    const auto tmp141 = tmp140 + tmp138;
    const auto tmp142 = tmp141 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp143 = tmp124 / tmp83;
    const auto tmp144 = tmp87 * tmp143;
    const auto tmp145 = tmp144 + tmp142;
    const auto tmp146 = tmp145 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp147 = tmp125 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp148 = tmp147 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp149 = tmp125 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp150 = tmp100 * tmp149;
    const auto tmp151 = tmp150 + tmp148;
    const auto tmp152 = tmp151 * tmp92;
    const auto tmp153 = tmp152 + tmp146;
    const auto tmp154 = 3 * tmp153;
    const auto tmp155 = tmp154 / tmp0;
    const auto tmp156 = tmp155 * tmp54;
    const auto tmp157 = -1 * tmp156;
    const auto tmp158 = 0.5 * tmp157;
    const auto tmp159 = tmp119 * tmp158;
    const auto tmp160 = -1 * tmp158;
    const auto tmp161 = tmp117 * tmp160;
    const auto tmp162 = tmp161 + tmp159;
    (result[ 0 ])[ 0 ] = tmp123;
    (result[ 0 ])[ 1 ] = tmp162;
  }

  template< class Point >
  void hessian ( const Point &x, typename FunctionSpaceType::HessianRangeType &result ) const
  {
    using std::cosh;
    using std::max;
    using std::min;
    using std::pow;
    using std::sinh;
    using std::sqrt;
    using std::tanh;
    double tmp0 = constant< 0 >();
    GlobalCoordinateType tmp1 = geometry().global( Dune::Fem::coordinate( x ) );
    const auto tmp2 = -0.4 + tmp1[ 0 ];
    const auto tmp3 = tmp1[ 1 ] * tmp1[ 1 ];
    const auto tmp4 = tmp1[ 0 ] * tmp1[ 0 ];
    const auto tmp5 = tmp4 + tmp3;
    const auto tmp6 = 1e-10 + tmp5;
    const auto tmp7 = std::sqrt( tmp6 );
    const auto tmp8 = -1.4 + tmp7;
    const auto tmp9 = std::min( tmp8, tmp2 );
    const auto tmp10 = -1 * tmp1[ 0 ];
    const auto tmp11 = -0.4 + tmp10;
    const auto tmp12 = std::min( tmp8, tmp11 );
    const auto tmp13 = std::max( tmp12, tmp9 );
    const auto tmp14 = 1 + tmp1[ 0 ];
    const auto tmp15 = tmp14 * tmp14;
    const auto tmp16 = tmp3 + tmp15;
    const auto tmp17 = 1e-10 + tmp16;
    const auto tmp18 = std::sqrt( tmp17 );
    const auto tmp19 = -0.5 + tmp18;
    const auto tmp20 = -1 + tmp1[ 0 ];
    const auto tmp21 = tmp20 * tmp20;
    const auto tmp22 = tmp3 + tmp21;
    const auto tmp23 = 1e-10 + tmp22;
    const auto tmp24 = std::sqrt( tmp23 );
    const auto tmp25 = -0.5 + tmp24;
    const auto tmp26 = 0.8 + tmp1[ 1 ];
    const auto tmp27 = tmp26 * tmp26;
    const auto tmp28 = tmp4 + tmp27;
    const auto tmp29 = 1e-10 + tmp28;
    const auto tmp30 = std::sqrt( tmp29 );
    const auto tmp31 = -0.5 + tmp30;
    const auto tmp32 = -1 * tmp31;
    const auto tmp33 = -0.8 + tmp1[ 1 ];
    const auto tmp34 = tmp33 * tmp33;
    const auto tmp35 = tmp4 + tmp34;
    const auto tmp36 = 1e-10 + tmp35;
    const auto tmp37 = std::sqrt( tmp36 );
    const auto tmp38 = -0.5 + tmp37;
    const auto tmp39 = -1 * tmp38;
    const auto tmp40 = -1 + tmp7;
    const auto tmp41 = std::max( tmp40, tmp39 );
    const auto tmp42 = std::max( tmp41, tmp32 );
    const auto tmp43 = std::min( tmp42, tmp25 );
    const auto tmp44 = std::min( tmp43, tmp19 );
    const auto tmp45 = std::max( tmp44, tmp13 );
    const auto tmp46 = 3 * tmp45;
    const auto tmp47 = tmp46 / tmp0;
    const auto tmp48 = 2.0 * tmp47;
    const auto tmp49 = std::cosh( tmp48 );
    const auto tmp50 = 1.0 + tmp49;
    const auto tmp51 = std::cosh( tmp47 );
    const auto tmp52 = 2.0 * tmp51;
    const auto tmp53 = tmp52 / tmp50;
    const auto tmp54 = std::pow( tmp53, 2 );
    const auto tmp55 = 2 * tmp7;
    const auto tmp56 = tmp1[ 0 ] + tmp1[ 0 ];
    const auto tmp57 = tmp56 / tmp55;
    const auto tmp58 = tmp57 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp59 = 2 * tmp37;
    const auto tmp60 = tmp56 / tmp59;
    const auto tmp61 = -1 * tmp60;
    const auto tmp62 = -1 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp63 = 1.0 + tmp62;
    const auto tmp64 = tmp63 * tmp61;
    const auto tmp65 = tmp64 + tmp58;
    const auto tmp66 = tmp65 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp67 = 2 * tmp30;
    const auto tmp68 = tmp56 / tmp67;
    const auto tmp69 = -1 * tmp68;
    const auto tmp70 = -1 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp71 = 1.0 + tmp70;
    const auto tmp72 = tmp71 * tmp69;
    const auto tmp73 = tmp72 + tmp66;
    const auto tmp74 = tmp73 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp75 = 2 * tmp24;
    const auto tmp76 = tmp20 + tmp20;
    const auto tmp77 = tmp76 / tmp75;
    const auto tmp78 = -1 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp79 = 1.0 + tmp78;
    const auto tmp80 = tmp79 * tmp77;
    const auto tmp81 = tmp80 + tmp74;
    const auto tmp82 = tmp81 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp83 = 2 * tmp18;
    const auto tmp84 = tmp14 + tmp14;
    const auto tmp85 = tmp84 / tmp83;
    const auto tmp86 = -1 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp87 = 1.0 + tmp86;
    const auto tmp88 = tmp87 * tmp85;
    const auto tmp89 = tmp88 + tmp82;
    const auto tmp90 = tmp89 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp91 = -1 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp92 = 1.0 + tmp91;
    const auto tmp93 = tmp57 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp94 = -1 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp95 = 1.0 + tmp94;
    const auto tmp96 = -1 * tmp95;
    const auto tmp97 = tmp96 + tmp93;
    const auto tmp98 = tmp97 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp99 = -1 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp100 = 1.0 + tmp99;
    const auto tmp101 = tmp57 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp102 = -1 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp103 = 1.0 + tmp102;
    const auto tmp104 = tmp103 + tmp101;
    const auto tmp105 = tmp104 * tmp100;
    const auto tmp106 = tmp105 + tmp98;
    const auto tmp107 = tmp106 * tmp92;
    const auto tmp108 = tmp107 + tmp90;
    const auto tmp109 = 3 * tmp108;
    const auto tmp110 = tmp109 / tmp0;
    const auto tmp111 = tmp110 * tmp54;
    const auto tmp112 = -1 * tmp111;
    const auto tmp113 = 0.5 * tmp112;
    const auto tmp114 = -1 * tmp113;
    const auto tmp115 = tmp114 * tmp113;
    const auto tmp116 = 2 * tmp57;
    const auto tmp117 = tmp116 * tmp57;
    const auto tmp118 = -1 * tmp117;
    const auto tmp119 = 2 + tmp118;
    const auto tmp120 = tmp119 / tmp55;
    const auto tmp121 = tmp120 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp122 = 2 * tmp60;
    const auto tmp123 = tmp122 * tmp60;
    const auto tmp124 = -1 * tmp123;
    const auto tmp125 = 2 + tmp124;
    const auto tmp126 = tmp125 / tmp59;
    const auto tmp127 = -1 * tmp126;
    const auto tmp128 = tmp63 * tmp127;
    const auto tmp129 = tmp128 + tmp121;
    const auto tmp130 = tmp129 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp131 = 2 * tmp68;
    const auto tmp132 = tmp131 * tmp68;
    const auto tmp133 = -1 * tmp132;
    const auto tmp134 = 2 + tmp133;
    const auto tmp135 = tmp134 / tmp67;
    const auto tmp136 = -1 * tmp135;
    const auto tmp137 = tmp71 * tmp136;
    const auto tmp138 = tmp137 + tmp130;
    const auto tmp139 = tmp138 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp140 = 2 * tmp77;
    const auto tmp141 = tmp140 * tmp77;
    const auto tmp142 = -1 * tmp141;
    const auto tmp143 = 2 + tmp142;
    const auto tmp144 = tmp143 / tmp75;
    const auto tmp145 = tmp79 * tmp144;
    const auto tmp146 = tmp145 + tmp139;
    const auto tmp147 = tmp146 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp148 = 2 * tmp85;
    const auto tmp149 = tmp148 * tmp85;
    const auto tmp150 = -1 * tmp149;
    const auto tmp151 = 2 + tmp150;
    const auto tmp152 = tmp151 / tmp83;
    const auto tmp153 = tmp87 * tmp152;
    const auto tmp154 = tmp153 + tmp147;
    const auto tmp155 = tmp154 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp156 = tmp120 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp157 = tmp156 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp158 = tmp120 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp159 = tmp100 * tmp158;
    const auto tmp160 = tmp159 + tmp157;
    const auto tmp161 = tmp160 * tmp92;
    const auto tmp162 = tmp161 + tmp155;
    const auto tmp163 = 3 * tmp162;
    const auto tmp164 = tmp163 / tmp0;
    const auto tmp165 = tmp164 * tmp54;
    const auto tmp166 = std::sinh( tmp47 );
    const auto tmp167 = tmp110 * tmp166;
    const auto tmp168 = 2.0 * tmp167;
    const auto tmp169 = std::sinh( tmp48 );
    const auto tmp170 = 2.0 * tmp110;
    const auto tmp171 = tmp170 * tmp169;
    const auto tmp172 = tmp171 * tmp53;
    const auto tmp173 = -1 * tmp172;
    const auto tmp174 = tmp173 + tmp168;
    const auto tmp175 = tmp174 / tmp50;
    const auto tmp176 = 2 * tmp175;
    const auto tmp177 = tmp176 * tmp53;
    const auto tmp178 = tmp177 * tmp110;
    const auto tmp179 = tmp178 + tmp165;
    const auto tmp180 = -1 * tmp179;
    const auto tmp181 = 0.5 * tmp180;
    const auto tmp182 = -1 * tmp181;
    const auto tmp183 = std::tanh( tmp47 );
    const auto tmp184 = -1 * tmp183;
    const auto tmp185 = 1 + tmp184;
    const auto tmp186 = 0.5 * tmp185;
    const auto tmp187 = tmp186 * tmp182;
    const auto tmp188 = tmp187 + tmp115;
    const auto tmp189 = -1 * tmp186;
    const auto tmp190 = 1 + tmp189;
    const auto tmp191 = tmp190 * tmp181;
    const auto tmp192 = tmp191 + tmp115;
    const auto tmp193 = tmp192 + tmp188;
    const auto tmp194 = tmp1[ 1 ] + tmp1[ 1 ];
    const auto tmp195 = tmp194 / tmp55;
    const auto tmp196 = tmp195 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp197 = tmp33 + tmp33;
    const auto tmp198 = tmp197 / tmp59;
    const auto tmp199 = -1 * tmp198;
    const auto tmp200 = tmp63 * tmp199;
    const auto tmp201 = tmp200 + tmp196;
    const auto tmp202 = tmp201 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp203 = tmp26 + tmp26;
    const auto tmp204 = tmp203 / tmp67;
    const auto tmp205 = -1 * tmp204;
    const auto tmp206 = tmp71 * tmp205;
    const auto tmp207 = tmp206 + tmp202;
    const auto tmp208 = tmp207 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp209 = tmp194 / tmp75;
    const auto tmp210 = tmp79 * tmp209;
    const auto tmp211 = tmp210 + tmp208;
    const auto tmp212 = tmp211 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp213 = tmp194 / tmp83;
    const auto tmp214 = tmp87 * tmp213;
    const auto tmp215 = tmp214 + tmp212;
    const auto tmp216 = tmp215 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp217 = tmp195 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp218 = tmp217 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp219 = tmp195 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp220 = tmp100 * tmp219;
    const auto tmp221 = tmp220 + tmp218;
    const auto tmp222 = tmp221 * tmp92;
    const auto tmp223 = tmp222 + tmp216;
    const auto tmp224 = 3 * tmp223;
    const auto tmp225 = tmp224 / tmp0;
    const auto tmp226 = tmp225 * tmp54;
    const auto tmp227 = -1 * tmp226;
    const auto tmp228 = 0.5 * tmp227;
    const auto tmp229 = tmp114 * tmp228;
    const auto tmp230 = 2 * tmp195;
    const auto tmp231 = tmp230 * tmp57;
    const auto tmp232 = -1 * tmp231;
    const auto tmp233 = tmp232 / tmp55;
    const auto tmp234 = tmp233 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp235 = 2 * tmp198;
    const auto tmp236 = tmp235 * tmp60;
    const auto tmp237 = -1 * tmp236;
    const auto tmp238 = tmp237 / tmp59;
    const auto tmp239 = -1 * tmp238;
    const auto tmp240 = tmp63 * tmp239;
    const auto tmp241 = tmp240 + tmp234;
    const auto tmp242 = tmp241 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp243 = 2 * tmp204;
    const auto tmp244 = tmp243 * tmp68;
    const auto tmp245 = -1 * tmp244;
    const auto tmp246 = tmp245 / tmp67;
    const auto tmp247 = -1 * tmp246;
    const auto tmp248 = tmp71 * tmp247;
    const auto tmp249 = tmp248 + tmp242;
    const auto tmp250 = tmp249 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp251 = 2 * tmp209;
    const auto tmp252 = tmp251 * tmp77;
    const auto tmp253 = -1 * tmp252;
    const auto tmp254 = tmp253 / tmp75;
    const auto tmp255 = tmp79 * tmp254;
    const auto tmp256 = tmp255 + tmp250;
    const auto tmp257 = tmp256 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp258 = 2 * tmp213;
    const auto tmp259 = tmp258 * tmp85;
    const auto tmp260 = -1 * tmp259;
    const auto tmp261 = tmp260 / tmp83;
    const auto tmp262 = tmp87 * tmp261;
    const auto tmp263 = tmp262 + tmp257;
    const auto tmp264 = tmp263 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp265 = tmp233 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp266 = tmp265 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp267 = tmp233 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp268 = tmp100 * tmp267;
    const auto tmp269 = tmp268 + tmp266;
    const auto tmp270 = tmp269 * tmp92;
    const auto tmp271 = tmp270 + tmp264;
    const auto tmp272 = 3 * tmp271;
    const auto tmp273 = tmp272 / tmp0;
    const auto tmp274 = tmp273 * tmp54;
    const auto tmp275 = tmp225 * tmp166;
    const auto tmp276 = 2.0 * tmp275;
    const auto tmp277 = 2.0 * tmp225;
    const auto tmp278 = tmp277 * tmp169;
    const auto tmp279 = tmp278 * tmp53;
    const auto tmp280 = -1 * tmp279;
    const auto tmp281 = tmp280 + tmp276;
    const auto tmp282 = tmp281 / tmp50;
    const auto tmp283 = 2 * tmp282;
    const auto tmp284 = tmp283 * tmp53;
    const auto tmp285 = tmp284 * tmp110;
    const auto tmp286 = tmp285 + tmp274;
    const auto tmp287 = -1 * tmp286;
    const auto tmp288 = 0.5 * tmp287;
    const auto tmp289 = -1 * tmp288;
    const auto tmp290 = tmp186 * tmp289;
    const auto tmp291 = tmp290 + tmp229;
    const auto tmp292 = -1 * tmp228;
    const auto tmp293 = tmp292 * tmp113;
    const auto tmp294 = tmp190 * tmp288;
    const auto tmp295 = tmp294 + tmp293;
    const auto tmp296 = tmp295 + tmp291;
    const auto tmp297 = tmp116 * tmp195;
    const auto tmp298 = -1 * tmp297;
    const auto tmp299 = tmp298 / tmp55;
    const auto tmp300 = tmp299 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp301 = tmp122 * tmp198;
    const auto tmp302 = -1 * tmp301;
    const auto tmp303 = tmp302 / tmp59;
    const auto tmp304 = -1 * tmp303;
    const auto tmp305 = tmp63 * tmp304;
    const auto tmp306 = tmp305 + tmp300;
    const auto tmp307 = tmp306 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp308 = tmp131 * tmp204;
    const auto tmp309 = -1 * tmp308;
    const auto tmp310 = tmp309 / tmp67;
    const auto tmp311 = -1 * tmp310;
    const auto tmp312 = tmp71 * tmp311;
    const auto tmp313 = tmp312 + tmp307;
    const auto tmp314 = tmp313 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp315 = tmp140 * tmp209;
    const auto tmp316 = -1 * tmp315;
    const auto tmp317 = tmp316 / tmp75;
    const auto tmp318 = tmp79 * tmp317;
    const auto tmp319 = tmp318 + tmp314;
    const auto tmp320 = tmp319 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp321 = tmp148 * tmp213;
    const auto tmp322 = -1 * tmp321;
    const auto tmp323 = tmp322 / tmp83;
    const auto tmp324 = tmp87 * tmp323;
    const auto tmp325 = tmp324 + tmp320;
    const auto tmp326 = tmp325 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp327 = tmp299 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp328 = tmp327 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp329 = tmp299 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp330 = tmp100 * tmp329;
    const auto tmp331 = tmp330 + tmp328;
    const auto tmp332 = tmp331 * tmp92;
    const auto tmp333 = tmp332 + tmp326;
    const auto tmp334 = 3 * tmp333;
    const auto tmp335 = tmp334 / tmp0;
    const auto tmp336 = tmp335 * tmp54;
    const auto tmp337 = tmp177 * tmp225;
    const auto tmp338 = tmp337 + tmp336;
    const auto tmp339 = -1 * tmp338;
    const auto tmp340 = 0.5 * tmp339;
    const auto tmp341 = tmp190 * tmp340;
    const auto tmp342 = tmp341 + tmp229;
    const auto tmp343 = -1 * tmp340;
    const auto tmp344 = tmp186 * tmp343;
    const auto tmp345 = tmp344 + tmp293;
    const auto tmp346 = tmp345 + tmp342;
    const auto tmp347 = tmp292 * tmp228;
    const auto tmp348 = tmp230 * tmp195;
    const auto tmp349 = -1 * tmp348;
    const auto tmp350 = 2 + tmp349;
    const auto tmp351 = tmp350 / tmp55;
    const auto tmp352 = tmp351 * (tmp40 > tmp39 ? 1 : 0.0);
    const auto tmp353 = tmp235 * tmp198;
    const auto tmp354 = -1 * tmp353;
    const auto tmp355 = 2 + tmp354;
    const auto tmp356 = tmp355 / tmp59;
    const auto tmp357 = -1 * tmp356;
    const auto tmp358 = tmp63 * tmp357;
    const auto tmp359 = tmp358 + tmp352;
    const auto tmp360 = tmp359 * (tmp41 > tmp32 ? 1 : 0.0);
    const auto tmp361 = tmp243 * tmp204;
    const auto tmp362 = -1 * tmp361;
    const auto tmp363 = 2 + tmp362;
    const auto tmp364 = tmp363 / tmp67;
    const auto tmp365 = -1 * tmp364;
    const auto tmp366 = tmp71 * tmp365;
    const auto tmp367 = tmp366 + tmp360;
    const auto tmp368 = tmp367 * (tmp42 < tmp25 ? 1 : 0.0);
    const auto tmp369 = tmp251 * tmp209;
    const auto tmp370 = -1 * tmp369;
    const auto tmp371 = 2 + tmp370;
    const auto tmp372 = tmp371 / tmp75;
    const auto tmp373 = tmp79 * tmp372;
    const auto tmp374 = tmp373 + tmp368;
    const auto tmp375 = tmp374 * (tmp43 < tmp19 ? 1 : 0.0);
    const auto tmp376 = tmp258 * tmp213;
    const auto tmp377 = -1 * tmp376;
    const auto tmp378 = 2 + tmp377;
    const auto tmp379 = tmp378 / tmp83;
    const auto tmp380 = tmp87 * tmp379;
    const auto tmp381 = tmp380 + tmp375;
    const auto tmp382 = tmp381 * (tmp44 > tmp13 ? 1 : 0.0);
    const auto tmp383 = tmp351 * (tmp8 < tmp11 ? 1 : 0.0);
    const auto tmp384 = tmp383 * (tmp12 > tmp9 ? 1 : 0.0);
    const auto tmp385 = tmp351 * (tmp8 < tmp2 ? 1 : 0.0);
    const auto tmp386 = tmp100 * tmp385;
    const auto tmp387 = tmp386 + tmp384;
    const auto tmp388 = tmp387 * tmp92;
    const auto tmp389 = tmp388 + tmp382;
    const auto tmp390 = 3 * tmp389;
    const auto tmp391 = tmp390 / tmp0;
    const auto tmp392 = tmp391 * tmp54;
    const auto tmp393 = tmp284 * tmp225;
    const auto tmp394 = tmp393 + tmp392;
    const auto tmp395 = -1 * tmp394;
    const auto tmp396 = 0.5 * tmp395;
    const auto tmp397 = -1 * tmp396;
    const auto tmp398 = tmp186 * tmp397;
    const auto tmp399 = tmp398 + tmp347;
    const auto tmp400 = tmp190 * tmp396;
    const auto tmp401 = tmp400 + tmp347;
    const auto tmp402 = tmp401 + tmp399;
    ((result[ 0 ])[ 0 ])[ 0 ] = tmp193;
    ((result[ 0 ])[ 0 ])[ 1 ] = tmp296;
    ((result[ 0 ])[ 1 ])[ 0 ] = tmp346;
    ((result[ 0 ])[ 1 ])[ 1 ] = tmp402;
  }

  template< std::size_t i >
  const ConstantType< i > &constant () const
  {
    return *std::get< i >( constants_ );
  }

  template< std::size_t i >
  ConstantType< i > &constant ()
  {
    return *std::get< i >( constants_ );
  }

  const Conepsilon &conepsilon () const
  {
    return *std::get< 0 >( constants_ );
  }

  Conepsilon &conepsilon ()
  {
    return *std::get< 0 >( constants_ );
  }
  ConstantTupleType constants_;
  std::tuple<  > coefficients_;
};

} // namespace UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee

PYBIND11_MODULE( localfunction_d4b9ca85d48735ee01f395a42eaa0cee_af122c1df944c95cd395ec0f91d0f970, module )
{
  typedef UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee::UFLLocalFunction< typename Dune::FemPy::GridPart< Dune::Fem::AdaptiveLeafGridPart< Dune::ALUGrid< 2, 2, Dune::simplex > > > > LocalFunctionType;
  if constexpr( LocalFunctionType::gridPartValid )
  {
      auto cls = Dune::Python::insertClass<LocalFunctionType>(module,"UFLLocalFunction",Dune::Python::GenerateTypeName("UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee::UFLLocalFunction< typename Dune::FemPy::GridPart< Dune::Fem::AdaptiveLeafGridPart< Dune::ALUGrid< 2, 2, Dune::simplex > > > >"), Dune::Python::IncludeFiles({"python/dune/generated/localfunction_d4b9ca85d48735ee01f395a42eaa0cee_af122c1df944c95cd395ec0f91d0f970.cc"})).first;
      Dune::FemPy::registerUFLLocalFunction( module, cls );
      cls.def( pybind11::init( [] ( pybind11::object gridView, const std::string &name, int order ) {return new LocalFunctionType( Dune::FemPy::gridPart<Dune::Fem::AdaptiveLeafGridPart< Dune::ALUGrid< 2, 2, Dune::simplex > >>(gridView),name,order); } ), pybind11::keep_alive< 1, 2 >() );
      cls.def_property( "epsilon", [] ( LocalFunctionType &self ) -> UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee::UFLLocalFunction< typename Dune::FemPy::GridPart< Dune::Fem::AdaptiveLeafGridPart< Dune::ALUGrid< 2, 2, Dune::simplex > > > >::Conepsilon { return self.conepsilon(); }, [] ( LocalFunctionType &self, const UFLLocalFunctions_d4b9ca85d48735ee01f395a42eaa0cee::UFLLocalFunction< typename Dune::FemPy::GridPart< Dune::Fem::AdaptiveLeafGridPart< Dune::ALUGrid< 2, 2, Dune::simplex > > > >::Conepsilon &v ) { self.conepsilon() = v; } );
      cls.def_property_readonly( "virtualized", [] ( LocalFunctionType& ) -> bool { return true;});
  }
}

#endif
