15.5.2 グラフの簡略化およびコピー

simplify()メソッドをコールすることにより、グラフの簡略化されたバージョンを作成できます。

Javaを使用したグラフの簡略化
PgxGraph simplify(Collection<VertexProperty<?, ?>> vertexProps, 
         Collection<EdgeProperty<?>> edgeProps, MultiEdges multiEdges, 
         SelfEdges selfEdges, TrivialVertices trivialVertices, 
         Mode mode, String newGraphName)
Pythonを使用したグラフの簡略化
simplify(self, vertex_properties=True, edge_properties=True, keep_multi_edges=False,
                 keep_self_edges=False, keep_trivial_vertices=False, in_place=False, name=None)

最初の2つの引数(vertexPropsおよびedgeProps)では、新しく作成される、簡略化されたグラフ・インスタンスにコピーするプロパティをリストします。PGXには、コンビニエンス定数VertexProperty.ALLEdgeProperty.ALLVertexProperty.NONEEdgeProperty.NONEが用意されており、それぞれ、すべてのプロパティを格納するか、いずれのプロパティも格納しないことを指定できます。

次の3つの引数では、グラフを簡略化するために実行する操作を決定します。

  • multiEdges: MultiEdges.REMOVE_MULTI_EDGESの場合、出力頂点と入力頂点の間の複数のエッジを除去します(つまり、2つの頂点間に最大1つのエッジを残します)。MultiEdges.KEEP_MULTI_EDGESは、それらを保持することを示します。デフォルトでは、PGXはマルチエッジから1つのエッジをピックし、そのプロパティを使用します。簡略化中にエッジ・プロパティをさらに細かく制御する方法は、高度なマルチエッジ処理を参照してください。
  • selfEdges: SelfEdges.REMOVE_SELF_EDGESの場合、出力と入力が同じ頂点であるすべてのエッジを除去します。SelfEdges.KEEP_MULTI_EDGESは、それらを保持することを示します。
  • trivialVertices: TrivialVertices.REMOVE_TRIVIAL_VERTICESの場合、入力エッジも出力エッジも持たないすべての頂点を除去します。TrivialVertices.KEEP_TRIVIAL_VERTICESは、それらを保持することを示します。

mode引数は、Mode.MUTATE_IN_PLACEに設定されている場合、新しいインスタンスを作成しないで、指定されたグラフ・インスタンスで変更が直接発生するようにリクエストします。Mode.CREATE_COPYに設定されている場合、このメソッドは、newGraphNameの新しい名前で新しいグラフ・インスタンスを作成します。newGraphNameが省略された(またはnullである)場合、PGXは一意のグラフ名を生成します。

このメソッドの戻り値は、簡略化されたPgxGraphインスタンスです。

Mode.MUTATE_IN_PLACEオプションを適用できるのは、グラフが可変としてマークされている場合のみです。PGXにロードされると、すべてのグラフがデフォルトで不変になります。PgxGraphを可変にするには、次のいずれかの方法を使用して、クライアントで最初にグラフのプライベート・コピーを作成する必要があります。

Javaを使用したグラフのコピー
PgxGraph clone()
PgxGraph clone(String newGraphName)
PgxGraph clone(Collection<VertexProperty<?, ?>> vertexProps, Collection<EdgeProperty<?>> edgeProps, String newGraphName)
Pythonを使用したグラフのコピー
clone(self, vertex_properties=True, edge_properties=True, name=None)

simplify()と同様に、ユーザーは、vertexPropsおよびedgePropsを使用して、コピーするグラフのオプションのプロパティを指定できます。プロパティを指定しない場合は、元のグラフのプロパティがすべて、新しいグラフ・インスタンスにコピーされます。ユーザーは、newGraphNameを使用して、新しく作成されるグラフ・インスタンスの名前を指定できます。