user: Explain BoneCollections(bpy_struct) in complete detail according to the official Blender documentation.

assistant: # BoneCollections(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.BoneCollections(*bpy_struct*)
:   The Bone Collections of this Armature

    active
    :   Armature’s active bone collection

        Type:
        :   [`BoneCollection`](bpy.types.BoneCollection.html#bpy.types.BoneCollection "bpy.types.BoneCollection")

    active_index
    :   The index of the Armature’s active bone collection; -1 when there is no active collection. Note that this is indexing the underlying array of bone collections, which may not be in the order you expect. Root collections are listed first, and siblings are always sequential. Apart from that, bone collections can be in any order, and thus incrementing or decrementing this index can make the active bone collection jump around in unexpected ways. For a more predictable interface, use `active` or `active_name`.

        Type:
        :   int in [-inf, inf], default 0

    active_name
    :   The name of the Armature’s active bone collection; empty when there is no active collection

        Type:
        :   string, default “”, (never None)

    is_solo_active
    :   Read-only flag that indicates there is at least one bone collection marked as ‘solo’

        Type:
        :   boolean, default False, (readonly)

    new(*name*, *\**, *parent=None*)
    :   Add a new empty bone collection to the armature

        Parameters:
        :   - **name** (*string**,* *(**never None**)*) – Name, Name of the new collection. Blender will ensure it is unique within the collections of the Armature.
            - **parent** ([`BoneCollection`](bpy.types.BoneCollection.html#bpy.types.BoneCollection "bpy.types.BoneCollection"), (optional)) – Parent Collection, If not None, the new bone collection becomes a child of this collection

        Returns:
        :   Newly created bone collection

        Return type:
        :   [`BoneCollection`](bpy.types.BoneCollection.html#bpy.types.BoneCollection "bpy.types.BoneCollection")

    remove(*bone_collection*)
    :   Remove the bone collection from the armature. If this bone collection has any children, they will be reassigned to their grandparent; in other words, the children will take the place of the removed bone collection.

        Parameters:
        :   **bone_collection** ([`BoneCollection`](bpy.types.BoneCollection.html#bpy.types.BoneCollection "bpy.types.BoneCollection")) – Bone Collection, The bone collection to remove

    move(*from_index*, *to_index*)
    :   Move a bone collection to a different position in the collection list. This can only be used to reorder siblings, and not to change parent-child relationships.

        Parameters:
        :   - **from_index** (*int in* *[**-inf**,* *inf**]*) – From Index, Index to move
            - **to_index** (*int in* *[**-inf**,* *inf**]*) – To Index, Target index

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type