その他:HDF 5、YAML、ASDF、キムチ (astropy.io.misc

♪the astropy.io.misc モジュールは、他の場所では適切でない様々な入出力ルーチンを含み、しばしば他に使用される astropy サブセットです。例えば astropy.io.misc.hdf5 読み書き関数を含む Table オブジェクトはHDF 5ファイルからHDF 5ファイルへ/HDF 5ファイルからHDF 5ファイルにインポートされますが、これらのオブジェクトはユーザが直接導入すべきではありません。逆にユーザは Table クラス自体(参照) 統一ファイル読み書きインタフェース )である。ユーザーが直接使用するためのルーチンが表示されています。 astropy.io.misc 一節です。

Asterpy.io.miscバッグ

このパッケージは、Asterpyを用いてデータ入出力を行うための様々な実用関数を含む。

機能

fnpickle \(オブジェクト,ファイル名[, protocol, append] )

オブジェクトを指定されたファイルにピックアップする.

fnunpickle \(ファイル名[, number] )

指定されたファイルから塩漬けされたオブジェクトの選択をキャンセルし、コンテンツを返します。

Asterpy.io.misc.hdf 5モジュール

このソフトウェアパッケージは、HDF 5テーブルを読み出して書き込むための関数を含み、これらのテーブルは、直接使用すべきではなく、中のリーダ/ライタとして使用することができる。 astropy.table それがそうです。見 統一ファイル読み書きインタフェース もっと細かいことを知っています。

機能

read_table_hdf5 \(入力[, path, ...] )

HDF 5ファイルから表オブジェクトを読み取る

write_table_hdf5 \(表,出力[, path, ...] )

HDF 5ファイルへの表オブジェクトの書き込み

Asterpy.io.misc.yamlモジュール

このモジュールは,YAMLプロトコルによりカーネルAsterpyオブジェクトを直列化する関数を含む.次のような機能を提供しています dump, load, and load_all which call the corresponding functions in PyYaml でも使うのは AstropyDumper そして AstropyLoader クラスは,以下のAsterpyクラスのカスタムYAMLタグを定義する:- astropy.units.Unit - astropy.units.Quantity - astropy.time.Time - astropy.time.TimeDelta - astropy.coordinates.SkyCoord - astropy.coordinates.Angle - astropy.coordinates.Latitude - astropy.coordinates.Longitude - astropy.coordinates.EarthLocation - astropy.table.SerializedColumn

注釈

このモジュールは、PyYamlバージョン3.13以上を必要とする。

例を引く

**
>>> from astropy.io.misc import yaml
>>> import astropy.units as u
>>> from astropy.time import Time
>>> from astropy.coordinates import EarthLocation
>>> t = Time(2457389.0, format='mjd',
...          location=EarthLocation(1000, 2000, 3000, unit=u.km))
>>> td = yaml.dump(t)
>>> print(td)
!astropy.time.Time
format: mjd
in_subfmt: '*'
jd1: 4857390.0
jd2: -0.5
location: !astropy.coordinates.earth.EarthLocation
  ellipsoid: WGS84
  x: !astropy.units.Quantity
    unit: &id001 !astropy.units.Unit {unit: km}
    value: 1000.0
  y: !astropy.units.Quantity
    unit: *id001
    value: 2000.0
  z: !astropy.units.Quantity
    unit: *id001
    value: 3000.0
out_subfmt: '*'
precision: 3
scale: utc
>>> ty = yaml.load(td)
>>> ty
<Time object: scale='utc' format='mjd' value=2457389.0>
>>> ty.location  
<EarthLocation (1000., 2000., 3000.) km>

機能

load \(ストリーム)

AstropyLoaderを使用して、ストリーム中の最初のYAMLドキュメントを解析し、対応するPythonオブジェクトを生成します。

load_all \(ストリーム)

AstropyLoaderクラスを用いてストリーム中のすべてのYAML文書を解析し、対応するPythonオブジェクトを生成します。

dump \(データ[, stream] )

AstropyDumperクラスを用いてPythonオブジェクトをYAMLストリームにシーケンス化する.

クラス

AstropyLoader \(ストリーム)

AsterpyコアオブジェクトおよびPythonタプルおよびUnicodeオブジェクトを構築するためのSafeLoaderをカスタマイズします。

AstropyDumper \(ストリーム[, default_style, ...] )

Safe Dumperをカスタマイズし、AsteryコアオブジェクトおよびPythonタプルおよびUnicodeオブジェクトを表します。

クラス継承関係図

Inheritance diagram of astropy.io.misc.yaml.AstropyLoader, astropy.io.misc.yaml.AstropyDumper

Asterpy.io.misc.asdfバッグ

♪the asdf サブパケットは直列化のためのコードを含む astropy タイプは、高度な科学データフォーマット(ASDF)を使用してそれらを表現および記憶することができるようにする。

もし両者がそれを兼ねていれば asdf そして 天体.天体 さらに構成することなく、以下を含むASDFファイルを処理することができる 天体.天体 タイプです。♪the asdf パッケージは定義されたラベルの存在を自動的に検出するように設計されている. 天体.天体 それがそうです。

便宜上,ユーザは作成することができる Table オブジェクトはasdfファイルに変換される. 統一ファイル読み書きインタフェース それがそうです。見 ASDFと表I/Oを組み合わせて使用する 下です。

ASDF標準に関する文書を見つけることができます here それがそうです。ASDF Pythonモジュールに関する文書を見つけることができます here それがそうです。Astropy開発者のその他の詳細については、ご参照ください 細かい点 それがそうです。

ASDFと表I/Oを組み合わせて使用する

ASDFは以下の項目にリーダとライタを提供する. Table 使用 統一ファイル読み書きインタフェース それがそうです。これにより、ASDFファイルの読み込みと書き込みが非常に便利になります Table データです。

基本的用法

1つのテーブルが与えられた場合、ASDFファイルに書き込むことができる:

from astropy.table import Table

# Create a simple table
t = Table(dtype=[('a', 'f4'), ('b', 'i4'), ('c', 'S2')])
# Write the table to an ASDF file
t.write('table.asdf')

I/O登録テーブルは、使用する適切なライタ関数を自動的に選択する .asdf ファイルの拡張子を出力します。

このように生成されたファイルは、以下のコマンドを用いて読み出してもよい read **

t2 = Table.read('table.asdf')

I/Oレジストリは、入力ファイルの拡張子に応じて適切なリーダ機能を自動的に選択する。

読み出しおよび書き込みの場合、ファイル拡張子がそうでなければ .asdf 使用するリーダ/ライタ関数は、明示的に指定することができる:

t3 = Table.read('table.zxcv', format='asdf')

高度な使用

基本ASDFデータ構造は木であり,基本データ構造の入れ子の組合せである(参照 this より詳細な説明を得るために)。最上階では木は dict それがそうです。

このようにした結果は Table オブジェクト(または任意のオブジェクト、この場合)は、ASDFツリー内の任意の位置に格納されてもよい。上述した基本ライタ用例は、所与のものを格納する Table ツリーの上部にデフォルト鍵が使用されます。基本的なカードリーダーの状況は Table 同じ場所に保管されています。

しかしながら、ユーザが記憶や検索のために異なるトップキーを指定する場合がある Table ASDFファイルからです。したがって,ASDF I/Oインタフェースは data_key 書き込みおよび読み出し時のオプションキーワードとして:

from astropy.table import Table

t = Table(dtype=[('a', 'f4'), ('b', 'i4'), ('c', 'S2')])
# Write the table to an ASDF file using a non-default key
t.write('foo.asdf', data_key='foo')

A Table カスタムデータキーを用いて格納されたデータは、同じパラメータを渡すことで read **

foo = Table.read('foo.asdf', data_key='foo')

♪the data_key オプションは適用されます Table ASDFツリーの上部に格納されているオブジェクトです。完全な汎用性を実現するために、ユーザは、ASDFファイルを書き込みまたは読み出したときにコールバックを伝達して、正確に定義することができる Table オブジェクトは木の中に置くべきである.大文字を書き込むオプションは make_tree それがそうです。関数コールは1つのパラメータのみを受け取るべきである,すなわち Table オブジェクトは1つに戻るべきです dict 格納する木を表す:

def make_custom_tree(table):
    # Return a nested tree where the table is stored at the second level
    return dict(foo=dict(bar=table))

t = Table(dtype=[('a', 'f4'), ('b', 'i4'), ('c', 'S2')])
# Write the table to an ASDF file using a non-default key
t.write('foobar.asdf', make_tree=make_custom_tree)

同様に、ASDFファイルを読み込む際に、ユーザは、ASDFツリー内のテーブルの位置を特定するためにカスタムコールを渡すことができる。この場合選択肢は find_table それがそうです。コールバックは1つのパラメータを受け取るべきです dict ASDF木を表しています Table 対象::

def find_table(tree):
    # This returns the Table that was stored by the example above
    return tree['foo']['bar']

foo = Table.read('foobar.asdf', find_table=find_table)

細かい点

♪the asdf サブパッケージ定義クラスと呼ばれています tags 直列化と逆直列化の論理です astropy タイプです。ユーザは直接参照タグ実装を必要としない.ASDFファイルを処理する際には,それらの存在は完全に透明であるはずである.

ASDFは抽象データタイプ定義を用いて パターン それがそうです。ここで提供するタグクラスは,特定のパターンの特定の実現である.いくつかのマークは astropy (例えば、変換に関連するもの)ASDF規格によって定義されるモードを実装する。他の場合にはマークもパターンも astropy (例えば、多くの座標フレームに関連するもの)。定義された各アーキテクチャの文書 astropy 下にいることができます パターン 一節です。

全部ではない astropy タイプは現在ASDFによって直列化されることができる。サポートされていないタイプのASDFファイルへの書き込みを試みると RepresenterError それがそうです。新しいタイプをサポートするためには、新しいタグとアーキテクチャを作成しなければならない。参照してください Writing ASDF Extensions より詳細な情報、および以下の例を取得する。

例:Astropy ASDF拡張への新しいオブジェクトの追加

この例では新しいものを実現する方法をお見せします Model 対象であるが,基本原則は他の対象の直列化に適用される astropy 物体です。先に述べたように,新しいオブジェクトを追加する astropy ASDF拡張にはタグとアーキテクチャが同時に必要である.

すべての変換パターンは現在ASDF規格で定義されている.任意の新しい直列化可能な変換はここで対応する新しいアーキテクチャを持っていなければならない。1つの名前を考えてみましょう MyModel これは新しい機種です astropy.modeling.functional_models 2つのパラメータがあります amplitude そして x_0 それがそうです。私たちはこの二つのパラメータの設定を厳格に要求したい。これらのパラメータは数値タイプであってもよいし,可能であることも指定したい. astropy.units.quantity キーを入れる。このモデルを記述するアーキテクチャは以下のようになる:

%YAML 1.1
---
$schema: "http://stsci.edu/schemas/yaml-schema/draft-01"
id: "http://stsci.edu/schemas/asdf/transform/mymodel-1.0.0"
tag: "tag:stsci.edu:asdf/transform/mymodel-1.0.0"
title: >
  Example new model.

description: >
  Example new model, which describes the distribution of ABC.

allOf:
  - $ref: "transform-1.2.0"
  - type: object
    properties:
      amplitude:
        anyOf:
          - $ref: "../unit/quantity-1.1.0"
          - type: number
        description: Amplitude of distribution.
      x_0:
        anyOf:
          - $ref: "../unit/quantity-1.1.0"
          - type: number
        description: X center position.

    required: ['amplitude', 'x_0]
...

すべての新しい変換アーキテクチャは、最新タイプの基本変換アーキテクチャを参照します。このパターンは,すべてまたは多くのモデルが共有する他のモデル属性を記述するため,各パターンはそのモデルに固有のパラメータのみを扱う.さらにこのアーキテクチャは最新のバージョンを引用しています quantity モデルは、モデルが単位および数に関する情報を保持することができるようにする。参照は,新たなカスタムタイプ内で以前に定義されたオブジェクトを使用することを許す.

The next component is the tag class. This class must have a to_tree method in which the required attributes of the object in question are obtained, and a from_tree method which reconstructs the object based on the parameters written to the ASDF file. astropy Models inherit from the TransformType base class tag, which takes care of attributes (e.g name, bounding_box, n_inputs) that are common to all or many Model classes to limit redundancy in individual tags. Each individual model tag then only has to obtain and set model-specific parameters:

from .basic import TransformType
from . import _parameter_to_value

class MyModelType(TransformType):
name = 'transform/mymodel'
version = '1.0.0'
types = ['astropy.modeling.functional_models.MyModel']

@classmethod
def from_tree_transform(cls, node, ctx):
    return functional_models.MyModel(amplitude=node['amplitude'],
                                     x_0=node['x_0'])

@classmethod
def to_tree_transform(cls, model, ctx):
    node = {'amplitude': _parameter_to_value(amplitude),
            'x_0': _parameter_to_value(x_0)}
    return node

このタグクラスは,オブジェクトをASDFファイルに構造化する機構と,ASDFファイルからそれらを再構築するすべての機構を含む.タグクラス(約束どおり‘Type’が追加されたオブジェクト名から命名された)参照アーキテクチャとバージョン,および astropy.modeling.functional_models それがそうです。基本モデルパラメータは to_tree_transform そして from_tree_transform 基地の一部です TransformType クラスはモデルに特定されたパラメータは MyModelType それがそうです。このモデルは,入力パラメータを持つ単位と数を用いることができるため,導入したΣ‘_PARAMETER_TO_VALUE``は,基本数値と数を活用することができる.

パターン

定義された個々のASDFアーキテクチャごとの文書 astropy 下で見つけることができます。