name: add_type description: gwexpyに新しい配列型(Array/Series/Field)とコレクションを実装する
Implement GWExPy Type
This skill guides the implementation of new array/field types in gwexpy, ensuring consistency with the existing class hierarchy, metadata management, and documentation standards.
Workflow
1. Survey & Plan
- Identify Base Class: Inherit from
gwexpy.types.Array,Array2D, or similar. - Metadata: Determine new metadata slots needed (e.g.,
_axis0_name,_unit). - Behavior: Define slicing behavior (does it drop dimensions or maintain them?), arithmetic rules, and domain logic (FFT, etc.).
2. Implementation: Core Class
- File: Create
gwexpy/types/yourtype.py. - Class Definition:
class YourType(BaseArray): _metadata_slots = BaseArray._metadata_slots + ("_new_slot",) __new__:- Validate input structure (ndim, etc.).
- Initialize metadata slots (handling defaults).
- Call
super().__new__.
__array_finalize__:- Handle 3 creation scenarios:
objis None (explicit new),objis subclass (view casting),objis different type (copy/slice). - Copy metadata from
objtoself.
- Handle 3 creation scenarios:
- Metadata-Preserving Indexing:
Field4D等の多次元クラスでは、インデックス操作 (__getitem__) 時に次元を落とさないことが推奨されます。整数インデックスiをslice(i, i+1)に変換して処理することで、軸の数とメタデータ(軸名称や単位)を一貫して維持できます。詳細はmanage_field_metadataスキルを参照してください。 - Transpose/Swapaxes:
- Override to update axis-dependent metadata if applicable.
3. Implementation: Collections
- File:
gwexpy/types/yourtype_collections.py(or inside the same file if small). - List Class: Inherit
list. Add batch methods (e.g.,process_all). - Dict Class: Inherit
dict. Add batch methods.
4. Integration
- Export: Add the new classes to
gwexpy/types/__init__.py. - Docs:
- Create
docs/reference/en/YourType.mdanddocs/reference/ja/YourType.md. - Add to
docs/reference/{en,ja}/index.rst.
- Create
5. Testing
- Location:
tests/types/test_yourtype.py. - Coverage:
- Construction (from array, from list, with units).
- Metadata persistence.
- Slicing behavior (key feature).
- Arithmetic operations.
- Collection behavior.
Key Considerations
- Quantity Compatibility: gwexpy types are often subclasses of
astropy.units.Quantity. Ensureunithandling works. - Axis Management: If managing axes, use
AxisApiMixinor look atArray3D/Array4Dfor how to sync separate axis properties with the array shape. - Documentation: Always provide both English and Japanese API references.