Compare commits
1 Commits
Eric_new_P
...
abandoned_
Author | SHA1 | Date | |
---|---|---|---|
1a2d552567 |
506
Licence_CeCILL_V2-en.txt
Normal file
506
Licence_CeCILL_V2-en.txt
Normal file
@ -0,0 +1,506 @@
|
||||
|
||||
CeCILL FREE SOFTWARE LICENSE AGREEMENT
|
||||
|
||||
|
||||
Notice
|
||||
|
||||
This Agreement is a Free Software license agreement that is the result
|
||||
of discussions between its authors in order to ensure compliance with
|
||||
the two main principles guiding its drafting:
|
||||
|
||||
* firstly, compliance with the principles governing the distribution
|
||||
of Free Software: access to source code, broad rights granted to
|
||||
users,
|
||||
* secondly, the election of a governing law, French law, with which
|
||||
it is conformant, both as regards the law of torts and
|
||||
intellectual property law, and the protection that it offers to
|
||||
both authors and holders of the economic rights over software.
|
||||
|
||||
The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
|
||||
license are:
|
||||
|
||||
Commissariat <20> l'Energie Atomique - CEA, a public scientific, technical
|
||||
and industrial research establishment, having its principal place of
|
||||
business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
|
||||
|
||||
Centre National de la Recherche Scientifique - CNRS, a public scientific
|
||||
and technological establishment, having its principal place of business
|
||||
at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
|
||||
|
||||
Institut National de Recherche en Informatique et en Automatique -
|
||||
INRIA, a public scientific and technological establishment, having its
|
||||
principal place of business at Domaine de Voluceau, Rocquencourt, BP
|
||||
105, 78153 Le Chesnay cedex, France.
|
||||
|
||||
|
||||
Preamble
|
||||
|
||||
The purpose of this Free Software license agreement is to grant users
|
||||
the right to modify and redistribute the software governed by this
|
||||
license within the framework of an open source distribution model.
|
||||
|
||||
The exercising of these rights is conditional upon certain obligations
|
||||
for users so as to preserve this status for all subsequent redistributions.
|
||||
|
||||
In consideration of access to the source code and the rights to copy,
|
||||
modify and redistribute granted by the license, users are provided only
|
||||
with a limited warranty and the software's author, the holder of the
|
||||
economic rights, and the successive licensors only have limited liability.
|
||||
|
||||
In this respect, the risks associated with loading, using, modifying
|
||||
and/or developing or reproducing the software by the user are brought to
|
||||
the user's attention, given its Free Software status, which may make it
|
||||
complicated to use, with the result that its use is reserved for
|
||||
developers and experienced professionals having in-depth computer
|
||||
knowledge. Users are therefore encouraged to load and test the
|
||||
suitability of the software as regards their requirements in conditions
|
||||
enabling the security of their systems and/or data to be ensured and,
|
||||
more generally, to use and operate it in the same conditions of
|
||||
security. This Agreement may be freely reproduced and published,
|
||||
provided it is not altered, and that no provisions are either added or
|
||||
removed herefrom.
|
||||
|
||||
This Agreement may apply to any or all software for which the holder of
|
||||
the economic rights decides to submit the use thereof to its provisions.
|
||||
|
||||
|
||||
Article 1 - DEFINITIONS
|
||||
|
||||
For the purpose of this Agreement, when the following expressions
|
||||
commence with a capital letter, they shall have the following meaning:
|
||||
|
||||
Agreement: means this license agreement, and its possible subsequent
|
||||
versions and annexes.
|
||||
|
||||
Software: means the software in its Object Code and/or Source Code form
|
||||
and, where applicable, its documentation, "as is" when the Licensee
|
||||
accepts the Agreement.
|
||||
|
||||
Initial Software: means the Software in its Source Code and possibly its
|
||||
Object Code form and, where applicable, its documentation, "as is" when
|
||||
it is first distributed under the terms and conditions of the Agreement.
|
||||
|
||||
Modified Software: means the Software modified by at least one
|
||||
Contribution.
|
||||
|
||||
Source Code: means all the Software's instructions and program lines to
|
||||
which access is required so as to modify the Software.
|
||||
|
||||
Object Code: means the binary files originating from the compilation of
|
||||
the Source Code.
|
||||
|
||||
Holder: means the holder(s) of the economic rights over the Initial
|
||||
Software.
|
||||
|
||||
Licensee: means the Software user(s) having accepted the Agreement.
|
||||
|
||||
Contributor: means a Licensee having made at least one Contribution.
|
||||
|
||||
Licensor: means the Holder, or any other individual or legal entity, who
|
||||
distributes the Software under the Agreement.
|
||||
|
||||
Contribution: means any or all modifications, corrections, translations,
|
||||
adaptations and/or new functions integrated into the Software by any or
|
||||
all Contributors, as well as any or all Internal Modules.
|
||||
|
||||
Module: means a set of sources files including their documentation that
|
||||
enables supplementary functions or services in addition to those offered
|
||||
by the Software.
|
||||
|
||||
External Module: means any or all Modules, not derived from the
|
||||
Software, so that this Module and the Software run in separate address
|
||||
spaces, with one calling the other when they are run.
|
||||
|
||||
Internal Module: means any or all Module, connected to the Software so
|
||||
that they both execute in the same address space.
|
||||
|
||||
GNU GPL: means the GNU General Public License version 2 or any
|
||||
subsequent version, as published by the Free Software Foundation Inc.
|
||||
|
||||
Parties: mean both the Licensee and the Licensor.
|
||||
|
||||
These expressions may be used both in singular and plural form.
|
||||
|
||||
|
||||
Article 2 - PURPOSE
|
||||
|
||||
The purpose of the Agreement is the grant by the Licensor to the
|
||||
Licensee of a non-exclusive, transferable and worldwide license for the
|
||||
Software as set forth in Article 5 hereinafter for the whole term of the
|
||||
protection granted by the rights over said Software.
|
||||
|
||||
|
||||
Article 3 - ACCEPTANCE
|
||||
|
||||
3.1 The Licensee shall be deemed as having accepted the terms and
|
||||
conditions of this Agreement upon the occurrence of the first of the
|
||||
following events:
|
||||
|
||||
* (i) loading the Software by any or all means, notably, by
|
||||
downloading from a remote server, or by loading from a physical
|
||||
medium;
|
||||
* (ii) the first time the Licensee exercises any of the rights
|
||||
granted hereunder.
|
||||
|
||||
3.2 One copy of the Agreement, containing a notice relating to the
|
||||
characteristics of the Software, to the limited warranty, and to the
|
||||
fact that its use is restricted to experienced users has been provided
|
||||
to the Licensee prior to its acceptance as set forth in Article 3.1
|
||||
hereinabove, and the Licensee hereby acknowledges that it has read and
|
||||
understood it.
|
||||
|
||||
|
||||
Article 4 - EFFECTIVE DATE AND TERM
|
||||
|
||||
|
||||
4.1 EFFECTIVE DATE
|
||||
|
||||
The Agreement shall become effective on the date when it is accepted by
|
||||
the Licensee as set forth in Article 3.1.
|
||||
|
||||
|
||||
4.2 TERM
|
||||
|
||||
The Agreement shall remain in force for the entire legal term of
|
||||
protection of the economic rights over the Software.
|
||||
|
||||
|
||||
Article 5 - SCOPE OF RIGHTS GRANTED
|
||||
|
||||
The Licensor hereby grants to the Licensee, who accepts, the following
|
||||
rights over the Software for any or all use, and for the term of the
|
||||
Agreement, on the basis of the terms and conditions set forth hereinafter.
|
||||
|
||||
Besides, if the Licensor owns or comes to own one or more patents
|
||||
protecting all or part of the functions of the Software or of its
|
||||
components, the Licensor undertakes not to enforce the rights granted by
|
||||
these patents against successive Licensees using, exploiting or
|
||||
modifying the Software. If these patents are transferred, the Licensor
|
||||
undertakes to have the transferees subscribe to the obligations set
|
||||
forth in this paragraph.
|
||||
|
||||
|
||||
5.1 RIGHT OF USE
|
||||
|
||||
The Licensee is authorized to use the Software, without any limitation
|
||||
as to its fields of application, with it being hereinafter specified
|
||||
that this comprises:
|
||||
|
||||
1. permanent or temporary reproduction of all or part of the Software
|
||||
by any or all means and in any or all form.
|
||||
|
||||
2. loading, displaying, running, or storing the Software on any or
|
||||
all medium.
|
||||
|
||||
3. entitlement to observe, study or test its operation so as to
|
||||
determine the ideas and principles behind any or all constituent
|
||||
elements of said Software. This shall apply when the Licensee
|
||||
carries out any or all loading, displaying, running, transmission
|
||||
or storage operation as regards the Software, that it is entitled
|
||||
to carry out hereunder.
|
||||
|
||||
|
||||
5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS
|
||||
|
||||
The right to make Contributions includes the right to translate, adapt,
|
||||
arrange, or make any or all modifications to the Software, and the right
|
||||
to reproduce the resulting software.
|
||||
|
||||
The Licensee is authorized to make any or all Contributions to the
|
||||
Software provided that it includes an explicit notice that it is the
|
||||
author of said Contribution and indicates the date of the creation thereof.
|
||||
|
||||
|
||||
5.3 RIGHT OF DISTRIBUTION
|
||||
|
||||
In particular, the right of distribution includes the right to publish,
|
||||
transmit and communicate the Software to the general public on any or
|
||||
all medium, and by any or all means, and the right to market, either in
|
||||
consideration of a fee, or free of charge, one or more copies of the
|
||||
Software by any means.
|
||||
|
||||
The Licensee is further authorized to distribute copies of the modified
|
||||
or unmodified Software to third parties according to the terms and
|
||||
conditions set forth hereinafter.
|
||||
|
||||
|
||||
5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
|
||||
|
||||
The Licensee is authorized to distribute true copies of the Software in
|
||||
Source Code or Object Code form, provided that said distribution
|
||||
complies with all the provisions of the Agreement and is accompanied by:
|
||||
|
||||
1. a copy of the Agreement,
|
||||
|
||||
2. a notice relating to the limitation of both the Licensor's
|
||||
warranty and liability as set forth in Articles 8 and 9,
|
||||
|
||||
and that, in the event that only the Object Code of the Software is
|
||||
redistributed, the Licensee allows future Licensees unhindered access to
|
||||
the full Source Code of the Software by indicating how to access it, it
|
||||
being understood that the additional cost of acquiring the Source Code
|
||||
shall not exceed the cost of transferring the data.
|
||||
|
||||
|
||||
5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
|
||||
|
||||
When the Licensee makes a Contribution to the Software, the terms and
|
||||
conditions for the distribution of the resulting Modified Software
|
||||
become subject to all the provisions of this Agreement.
|
||||
|
||||
The Licensee is authorized to distribute the Modified Software, in
|
||||
source code or object code form, provided that said distribution
|
||||
complies with all the provisions of the Agreement and is accompanied by:
|
||||
|
||||
1. a copy of the Agreement,
|
||||
|
||||
2. a notice relating to the limitation of both the Licensor's
|
||||
warranty and liability as set forth in Articles 8 and 9,
|
||||
|
||||
and that, in the event that only the object code of the Modified
|
||||
Software is redistributed, the Licensee allows future Licensees
|
||||
unhindered access to the full source code of the Modified Software by
|
||||
indicating how to access it, it being understood that the additional
|
||||
cost of acquiring the source code shall not exceed the cost of
|
||||
transferring the data.
|
||||
|
||||
|
||||
5.3.3 DISTRIBUTION OF EXTERNAL MODULES
|
||||
|
||||
When the Licensee has developed an External Module, the terms and
|
||||
conditions of this Agreement do not apply to said External Module, that
|
||||
may be distributed under a separate license agreement.
|
||||
|
||||
|
||||
5.3.4 COMPATIBILITY WITH THE GNU GPL
|
||||
|
||||
The Licensee can include a code that is subject to the provisions of one
|
||||
of the versions of the GNU GPL in the Modified or unmodified Software,
|
||||
and distribute that entire code under the terms of the same version of
|
||||
the GNU GPL.
|
||||
|
||||
The Licensee can include the Modified or unmodified Software in a code
|
||||
that is subject to the provisions of one of the versions of the GNU GPL,
|
||||
and distribute that entire code under the terms of the same version of
|
||||
the GNU GPL.
|
||||
|
||||
|
||||
Article 6 - INTELLECTUAL PROPERTY
|
||||
|
||||
|
||||
6.1 OVER THE INITIAL SOFTWARE
|
||||
|
||||
The Holder owns the economic rights over the Initial Software. Any or
|
||||
all use of the Initial Software is subject to compliance with the terms
|
||||
and conditions under which the Holder has elected to distribute its work
|
||||
and no one shall be entitled to modify the terms and conditions for the
|
||||
distribution of said Initial Software.
|
||||
|
||||
The Holder undertakes that the Initial Software will remain ruled at
|
||||
least by this Agreement, for the duration set forth in Article 4.2.
|
||||
|
||||
|
||||
6.2 OVER THE CONTRIBUTIONS
|
||||
|
||||
The Licensee who develops a Contribution is the owner of the
|
||||
intellectual property rights over this Contribution as defined by
|
||||
applicable law.
|
||||
|
||||
|
||||
6.3 OVER THE EXTERNAL MODULES
|
||||
|
||||
The Licensee who develops an External Module is the owner of the
|
||||
intellectual property rights over this External Module as defined by
|
||||
applicable law and is free to choose the type of agreement that shall
|
||||
govern its distribution.
|
||||
|
||||
|
||||
6.4 JOINT PROVISIONS
|
||||
|
||||
The Licensee expressly undertakes:
|
||||
|
||||
1. not to remove, or modify, in any manner, the intellectual property
|
||||
notices attached to the Software;
|
||||
|
||||
2. to reproduce said notices, in an identical manner, in the copies
|
||||
of the Software modified or not.
|
||||
|
||||
The Licensee undertakes not to directly or indirectly infringe the
|
||||
intellectual property rights of the Holder and/or Contributors on the
|
||||
Software and to take, where applicable, vis-<2D>-vis its staff, any and all
|
||||
measures required to ensure respect of said intellectual property rights
|
||||
of the Holder and/or Contributors.
|
||||
|
||||
|
||||
Article 7 - RELATED SERVICES
|
||||
|
||||
7.1 Under no circumstances shall the Agreement oblige the Licensor to
|
||||
provide technical assistance or maintenance services for the Software.
|
||||
|
||||
However, the Licensor is entitled to offer this type of services. The
|
||||
terms and conditions of such technical assistance, and/or such
|
||||
maintenance, shall be set forth in a separate instrument. Only the
|
||||
Licensor offering said maintenance and/or technical assistance services
|
||||
shall incur liability therefor.
|
||||
|
||||
7.2 Similarly, any Licensor is entitled to offer to its licensees, under
|
||||
its sole responsibility, a warranty, that shall only be binding upon
|
||||
itself, for the redistribution of the Software and/or the Modified
|
||||
Software, under terms and conditions that it is free to decide. Said
|
||||
warranty, and the financial terms and conditions of its application,
|
||||
shall be subject of a separate instrument executed between the Licensor
|
||||
and the Licensee.
|
||||
|
||||
|
||||
Article 8 - LIABILITY
|
||||
|
||||
8.1 Subject to the provisions of Article 8.2, the Licensee shall be
|
||||
entitled to claim compensation for any direct loss it may have suffered
|
||||
from the Software as a result of a fault on the part of the relevant
|
||||
Licensor, subject to providing evidence thereof.
|
||||
|
||||
8.2 The Licensor's liability is limited to the commitments made under
|
||||
this Agreement and shall not be incurred as a result of in particular:
|
||||
(i) loss due the Licensee's total or partial failure to fulfill its
|
||||
obligations, (ii) direct or consequential loss that is suffered by the
|
||||
Licensee due to the use or performance of the Software, and (iii) more
|
||||
generally, any consequential loss. In particular the Parties expressly
|
||||
agree that any or all pecuniary or business loss (i.e. loss of data,
|
||||
loss of profits, operating loss, loss of customers or orders,
|
||||
opportunity cost, any disturbance to business activities) or any or all
|
||||
legal proceedings instituted against the Licensee by a third party,
|
||||
shall constitute consequential loss and shall not provide entitlement to
|
||||
any or all compensation from the Licensor.
|
||||
|
||||
|
||||
Article 9 - WARRANTY
|
||||
|
||||
9.1 The Licensee acknowledges that the scientific and technical
|
||||
state-of-the-art when the Software was distributed did not enable all
|
||||
possible uses to be tested and verified, nor for the presence of
|
||||
possible defects to be detected. In this respect, the Licensee's
|
||||
attention has been drawn to the risks associated with loading, using,
|
||||
modifying and/or developing and reproducing the Software which are
|
||||
reserved for experienced users.
|
||||
|
||||
The Licensee shall be responsible for verifying, by any or all means,
|
||||
the suitability of the product for its requirements, its good working
|
||||
order, and for ensuring that it shall not cause damage to either persons
|
||||
or properties.
|
||||
|
||||
9.2 The Licensor hereby represents, in good faith, that it is entitled
|
||||
to grant all the rights over the Software (including in particular the
|
||||
rights set forth in Article 5).
|
||||
|
||||
9.3 The Licensee acknowledges that the Software is supplied "as is" by
|
||||
the Licensor without any other express or tacit warranty, other than
|
||||
that provided for in Article 9.2 and, in particular, without any warranty
|
||||
as to its commercial value, its secured, safe, innovative or relevant
|
||||
nature.
|
||||
|
||||
Specifically, the Licensor does not warrant that the Software is free
|
||||
from any error, that it will operate without interruption, that it will
|
||||
be compatible with the Licensee's own equipment and software
|
||||
configuration, nor that it will meet the Licensee's requirements.
|
||||
|
||||
9.4 The Licensor does not either expressly or tacitly warrant that the
|
||||
Software does not infringe any third party intellectual property right
|
||||
relating to a patent, software or any other property right. Therefore,
|
||||
the Licensor disclaims any and all liability towards the Licensee
|
||||
arising out of any or all proceedings for infringement that may be
|
||||
instituted in respect of the use, modification and redistribution of the
|
||||
Software. Nevertheless, should such proceedings be instituted against
|
||||
the Licensee, the Licensor shall provide it with technical and legal
|
||||
assistance for its defense. Such technical and legal assistance shall be
|
||||
decided on a case-by-case basis between the relevant Licensor and the
|
||||
Licensee pursuant to a memorandum of understanding. The Licensor
|
||||
disclaims any and all liability as regards the Licensee's use of the
|
||||
name of the Software. No warranty is given as regards the existence of
|
||||
prior rights over the name of the Software or as regards the existence
|
||||
of a trademark.
|
||||
|
||||
|
||||
Article 10 - TERMINATION
|
||||
|
||||
10.1 In the event of a breach by the Licensee of its obligations
|
||||
hereunder, the Licensor may automatically terminate this Agreement
|
||||
thirty (30) days after notice has been sent to the Licensee and has
|
||||
remained ineffective.
|
||||
|
||||
10.2 A Licensee whose Agreement is terminated shall no longer be
|
||||
authorized to use, modify or distribute the Software. However, any
|
||||
licenses that it may have granted prior to termination of the Agreement
|
||||
shall remain valid subject to their having been granted in compliance
|
||||
with the terms and conditions hereof.
|
||||
|
||||
|
||||
Article 11 - MISCELLANEOUS
|
||||
|
||||
|
||||
11.1 EXCUSABLE EVENTS
|
||||
|
||||
Neither Party shall be liable for any or all delay, or failure to
|
||||
perform the Agreement, that may be attributable to an event of force
|
||||
majeure, an act of God or an outside cause, such as defective
|
||||
functioning or interruptions of the electricity or telecommunications
|
||||
networks, network paralysis following a virus attack, intervention by
|
||||
government authorities, natural disasters, water damage, earthquakes,
|
||||
fire, explosions, strikes and labor unrest, war, etc.
|
||||
|
||||
11.2 Any failure by either Party, on one or more occasions, to invoke
|
||||
one or more of the provisions hereof, shall under no circumstances be
|
||||
interpreted as being a waiver by the interested Party of its right to
|
||||
invoke said provision(s) subsequently.
|
||||
|
||||
11.3 The Agreement cancels and replaces any or all previous agreements,
|
||||
whether written or oral, between the Parties and having the same
|
||||
purpose, and constitutes the entirety of the agreement between said
|
||||
Parties concerning said purpose. No supplement or modification to the
|
||||
terms and conditions hereof shall be effective as between the Parties
|
||||
unless it is made in writing and signed by their duly authorized
|
||||
representatives.
|
||||
|
||||
11.4 In the event that one or more of the provisions hereof were to
|
||||
conflict with a current or future applicable act or legislative text,
|
||||
said act or legislative text shall prevail, and the Parties shall make
|
||||
the necessary amendments so as to comply with said act or legislative
|
||||
text. All other provisions shall remain effective. Similarly, invalidity
|
||||
of a provision of the Agreement, for any reason whatsoever, shall not
|
||||
cause the Agreement as a whole to be invalid.
|
||||
|
||||
|
||||
11.5 LANGUAGE
|
||||
|
||||
The Agreement is drafted in both French and English and both versions
|
||||
are deemed authentic.
|
||||
|
||||
|
||||
Article 12 - NEW VERSIONS OF THE AGREEMENT
|
||||
|
||||
12.1 Any person is authorized to duplicate and distribute copies of this
|
||||
Agreement.
|
||||
|
||||
12.2 So as to ensure coherence, the wording of this Agreement is
|
||||
protected and may only be modified by the authors of the License, who
|
||||
reserve the right to periodically publish updates or new versions of the
|
||||
Agreement, each with a separate number. These subsequent versions may
|
||||
address new issues encountered by Free Software.
|
||||
|
||||
12.3 Any Software distributed under a given version of the Agreement may
|
||||
only be subsequently distributed under the same version of the Agreement
|
||||
or a subsequent version, subject to the provisions of Article 5.3.4.
|
||||
|
||||
|
||||
Article 13 - GOVERNING LAW AND JURISDICTION
|
||||
|
||||
13.1 The Agreement is governed by French law. The Parties agree to
|
||||
endeavor to seek an amicable solution to any disagreements or disputes
|
||||
that may arise during the performance of the Agreement.
|
||||
|
||||
13.2 Failing an amicable solution within two (2) months as from their
|
||||
occurrence, and unless emergency proceedings are necessary, the
|
||||
disagreements or disputes shall be referred to the Paris Courts having
|
||||
jurisdiction, by the more diligent Party.
|
||||
|
||||
|
||||
Version 2.0 dated 2006-09-05.
|
512
Licence_CeCILL_V2-fr.txt
Normal file
512
Licence_CeCILL_V2-fr.txt
Normal file
@ -0,0 +1,512 @@
|
||||
|
||||
CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL
|
||||
|
||||
|
||||
Avertissement
|
||||
|
||||
Ce contrat est une licence de logiciel libre issue d'une concertation
|
||||
entre ses auteurs afin que le respect de deux grands principes pr<70>side <20>
|
||||
sa r<>daction:
|
||||
|
||||
* d'une part, le respect des principes de diffusion des logiciels
|
||||
libres: acc<63>s au code source, droits <20>tendus conf<6E>r<EFBFBD>s aux
|
||||
utilisateurs,
|
||||
* d'autre part, la d<>signation d'un droit applicable, le droit
|
||||
fran<61>ais, auquel elle est conforme, tant au regard du droit de la
|
||||
responsabilit<69> civile que du droit de la propri<72>t<EFBFBD> intellectuelle
|
||||
et de la protection qu'il offre aux auteurs et titulaires des
|
||||
droits patrimoniaux sur un logiciel.
|
||||
|
||||
Les auteurs de la licence CeCILL (pour Ce[a] C[nrs] I[nria] L[ogiciel]
|
||||
L[ibre]) sont:
|
||||
|
||||
Commissariat <20> l'Energie Atomique - CEA, <20>tablissement public de
|
||||
recherche <20> caract<63>re scientifique, technique et industriel, dont le
|
||||
si<EFBFBD>ge est situ<74> 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris.
|
||||
|
||||
Centre National de la Recherche Scientifique - CNRS, <20>tablissement
|
||||
public <20> caract<63>re scientifique et technologique, dont le si<73>ge est
|
||||
situ<EFBFBD> 3 rue Michel-Ange, 75794 Paris cedex 16.
|
||||
|
||||
Institut National de Recherche en Informatique et en Automatique -
|
||||
INRIA, <20>tablissement public <20> caract<63>re scientifique et technologique,
|
||||
dont le si<73>ge est situ<74> Domaine de Voluceau, Rocquencourt, BP 105, 78153
|
||||
Le Chesnay cedex.
|
||||
|
||||
|
||||
Pr<50>ambule
|
||||
|
||||
Ce contrat est une licence de logiciel libre dont l'objectif est de
|
||||
conf<EFBFBD>rer aux utilisateurs la libert<72> de modification et de
|
||||
redistribution du logiciel r<>gi par cette licence dans le cadre d'un
|
||||
mod<EFBFBD>le de diffusion en logiciel libre.
|
||||
|
||||
L'exercice de ces libert<72>s est assorti de certains devoirs <20> la charge
|
||||
des utilisateurs afin de pr<70>server ce statut au cours des
|
||||
redistributions ult<6C>rieures.
|
||||
|
||||
L'accessibilit<69> au code source et les droits de copie, de modification
|
||||
et de redistribution qui en d<>coulent ont pour contrepartie de n'offrir
|
||||
aux utilisateurs qu'une garantie limit<69>e et de ne faire peser sur
|
||||
l'auteur du logiciel, le titulaire des droits patrimoniaux et les
|
||||
conc<EFBFBD>dants successifs qu'une responsabilit<69> restreinte.
|
||||
|
||||
A cet <20>gard l'attention de l'utilisateur est attir<69>e sur les risques
|
||||
associ<EFBFBD>s au chargement, <20> l'utilisation, <20> la modification et/ou au
|
||||
d<EFBFBD>veloppement et <20> la reproduction du logiciel par l'utilisateur <20>tant
|
||||
donn<EFBFBD> sa sp<73>cificit<69> de logiciel libre, qui peut le rendre complexe <20>
|
||||
manipuler et qui le r<>serve donc <20> des d<>veloppeurs ou des
|
||||
professionnels avertis poss<73>dant des connaissances informatiques
|
||||
approfondies. Les utilisateurs sont donc invit<69>s <20> charger et tester
|
||||
l'ad<61>quation du logiciel <20> leurs besoins dans des conditions permettant
|
||||
d'assurer la s<>curit<69> de leurs syst<73>mes et/ou de leurs donn<6E>es et, plus
|
||||
g<EFBFBD>n<EFBFBD>ralement, <20> l'utiliser et l'exploiter dans les m<>mes conditions de
|
||||
s<EFBFBD>curit<EFBFBD>. Ce contrat peut <20>tre reproduit et diffus<75> librement, sous
|
||||
r<EFBFBD>serve de le conserver en l'<27>tat, sans ajout ni suppression de clauses.
|
||||
|
||||
Ce contrat est susceptible de s'appliquer <20> tout logiciel dont le
|
||||
titulaire des droits patrimoniaux d<>cide de soumettre l'exploitation aux
|
||||
dispositions qu'il contient.
|
||||
|
||||
|
||||
Article 1 - DEFINITIONS
|
||||
|
||||
Dans ce contrat, les termes suivants, lorsqu'ils seront <20>crits avec une
|
||||
lettre capitale, auront la signification suivante:
|
||||
|
||||
Contrat: d<>signe le pr<70>sent contrat de licence, ses <20>ventuelles versions
|
||||
post<EFBFBD>rieures et annexes.
|
||||
|
||||
Logiciel: d<>signe le logiciel sous sa forme de Code Objet et/ou de Code
|
||||
Source et le cas <20>ch<63>ant sa documentation, dans leur <20>tat au moment de
|
||||
l'acceptation du Contrat par le Licenci<63>.
|
||||
|
||||
Logiciel Initial: d<>signe le Logiciel sous sa forme de Code Source et
|
||||
<EFBFBD>ventuellement de Code Objet et le cas <20>ch<63>ant sa documentation, dans
|
||||
leur <20>tat au moment de leur premi<6D>re diffusion sous les termes du Contrat.
|
||||
|
||||
Logiciel Modifi<66>: d<>signe le Logiciel modifi<66> par au moins une
|
||||
Contribution.
|
||||
|
||||
Code Source: d<>signe l'ensemble des instructions et des lignes de
|
||||
programme du Logiciel et auquel l'acc<63>s est n<>cessaire en vue de
|
||||
modifier le Logiciel.
|
||||
|
||||
Code Objet: d<>signe les fichiers binaires issus de la compilation du
|
||||
Code Source.
|
||||
|
||||
Titulaire: d<>signe le ou les d<>tenteurs des droits patrimoniaux d'auteur
|
||||
sur le Logiciel Initial.
|
||||
|
||||
Licenci<EFBFBD>: d<>signe le ou les utilisateurs du Logiciel ayant accept<70> le
|
||||
Contrat.
|
||||
|
||||
Contributeur: d<>signe le Licenci<63> auteur d'au moins une Contribution.
|
||||
|
||||
Conc<EFBFBD>dant: d<>signe le Titulaire ou toute personne physique ou morale
|
||||
distribuant le Logiciel sous le Contrat.
|
||||
|
||||
Contribution: d<>signe l'ensemble des modifications, corrections,
|
||||
traductions, adaptations et/ou nouvelles fonctionnalit<69>s int<6E>gr<67>es dans
|
||||
le Logiciel par tout Contributeur, ainsi que tout Module Interne.
|
||||
|
||||
Module: d<>signe un ensemble de fichiers sources y compris leur
|
||||
documentation qui permet de r<>aliser des fonctionnalit<69>s ou services
|
||||
suppl<EFBFBD>mentaires <20> ceux fournis par le Logiciel.
|
||||
|
||||
Module Externe: d<>signe tout Module, non d<>riv<69> du Logiciel, tel que ce
|
||||
Module et le Logiciel s'ex<65>cutent dans des espaces d'adressage
|
||||
diff<EFBFBD>rents, l'un appelant l'autre au moment de leur ex<65>cution.
|
||||
|
||||
Module Interne: d<>signe tout Module li<6C> au Logiciel de telle sorte
|
||||
qu'ils s'ex<65>cutent dans le m<>me espace d'adressage.
|
||||
|
||||
GNU GPL: d<>signe la GNU General Public License dans sa version 2 ou
|
||||
toute version ult<6C>rieure, telle que publi<6C>e par Free Software Foundation
|
||||
Inc.
|
||||
|
||||
Parties: d<>signe collectivement le Licenci<63> et le Conc<6E>dant.
|
||||
|
||||
Ces termes s'entendent au singulier comme au pluriel.
|
||||
|
||||
|
||||
Article 2 - OBJET
|
||||
|
||||
Le Contrat a pour objet la concession par le Conc<6E>dant au Licenci<63> d'une
|
||||
licence non exclusive, cessible et mondiale du Logiciel telle que
|
||||
d<EFBFBD>finie ci-apr<70>s <20> l'article 5 pour toute la dur<75>e de protection des droits
|
||||
portant sur ce Logiciel.
|
||||
|
||||
|
||||
Article 3 - ACCEPTATION
|
||||
|
||||
3.1 L'acceptation par le Licenci<63> des termes du Contrat est r<>put<75>e
|
||||
acquise du fait du premier des faits suivants:
|
||||
|
||||
* (i) le chargement du Logiciel par tout moyen notamment par
|
||||
t<>l<EFBFBD>chargement <20> partir d'un serveur distant ou par chargement <20>
|
||||
partir d'un support physique;
|
||||
* (ii) le premier exercice par le Licenci<63> de l'un quelconque des
|
||||
droits conc<6E>d<EFBFBD>s par le Contrat.
|
||||
|
||||
3.2 Un exemplaire du Contrat, contenant notamment un avertissement
|
||||
relatif aux sp<73>cificit<69>s du Logiciel, <20> la restriction de garantie et <20>
|
||||
la limitation <20> un usage par des utilisateurs exp<78>riment<6E>s a <20>t<EFBFBD> mis <20>
|
||||
disposition du Licenci<63> pr<70>alablement <20> son acceptation telle que
|
||||
d<EFBFBD>finie <20> l'article 3.1 ci dessus et le Licenci<63> reconna<6E>t en avoir pris
|
||||
connaissance.
|
||||
|
||||
|
||||
Article 4 - ENTREE EN VIGUEUR ET DUREE
|
||||
|
||||
|
||||
4.1 ENTREE EN VIGUEUR
|
||||
|
||||
Le Contrat entre en vigueur <20> la date de son acceptation par le Licenci<63>
|
||||
telle que d<>finie en 3.1.
|
||||
|
||||
|
||||
4.2 DUREE
|
||||
|
||||
Le Contrat produira ses effets pendant toute la dur<75>e l<>gale de
|
||||
protection des droits patrimoniaux portant sur le Logiciel.
|
||||
|
||||
|
||||
Article 5 - ETENDUE DES DROITS CONCEDES
|
||||
|
||||
Le Conc<6E>dant conc<6E>de au Licenci<63>, qui accepte, les droits suivants sur
|
||||
le Logiciel pour toutes destinations et pour la dur<75>e du Contrat dans
|
||||
les conditions ci-apr<70>s d<>taill<6C>es.
|
||||
|
||||
Par ailleurs, si le Conc<6E>dant d<>tient ou venait <20> d<>tenir un ou
|
||||
plusieurs brevets d'invention prot<6F>geant tout ou partie des
|
||||
fonctionnalit<EFBFBD>s du Logiciel ou de ses composants, il s'engage <20> ne pas
|
||||
opposer les <20>ventuels droits conf<6E>r<EFBFBD>s par ces brevets aux Licenci<63>s
|
||||
successifs qui utiliseraient, exploiteraient ou modifieraient le
|
||||
Logiciel. En cas de cession de ces brevets, le Conc<6E>dant s'engage <20>
|
||||
faire reprendre les obligations du pr<70>sent alin<69>a aux cessionnaires.
|
||||
|
||||
|
||||
5.1 DROIT D'UTILISATION
|
||||
|
||||
Le Licenci<63> est autoris<69> <20> utiliser le Logiciel, sans restriction quant
|
||||
aux domaines d'application, <20>tant ci-apr<70>s pr<70>cis<69> que cela comporte:
|
||||
|
||||
1. la reproduction permanente ou provisoire du Logiciel en tout ou
|
||||
partie par tout moyen et sous toute forme.
|
||||
|
||||
2. le chargement, l'affichage, l'ex<65>cution, ou le stockage du
|
||||
Logiciel sur tout support.
|
||||
|
||||
3. la possibilit<69> d'en observer, d'en <20>tudier, ou d'en tester le
|
||||
fonctionnement afin de d<>terminer les id<69>es et principes qui sont
|
||||
<20> la base de n'importe quel <20>l<EFBFBD>ment de ce Logiciel; et ceci,
|
||||
lorsque le Licenci<63> effectue toute op<6F>ration de chargement,
|
||||
d'affichage, d'ex<65>cution, de transmission ou de stockage du
|
||||
Logiciel qu'il est en droit d'effectuer en vertu du Contrat.
|
||||
|
||||
|
||||
5.2 DROIT D'APPORTER DES CONTRIBUTIONS
|
||||
|
||||
Le droit d'apporter des Contributions comporte le droit de traduire,
|
||||
d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel
|
||||
et le droit de reproduire le logiciel en r<>sultant.
|
||||
|
||||
Le Licenci<63> est autoris<69> <20> apporter toute Contribution au Logiciel sous
|
||||
r<EFBFBD>serve de mentionner, de fa<66>on explicite, son nom en tant qu'auteur de
|
||||
cette Contribution et la date de cr<63>ation de celle-ci.
|
||||
|
||||
|
||||
5.3 DROIT DE DISTRIBUTION
|
||||
|
||||
Le droit de distribution comporte notamment le droit de diffuser, de
|
||||
transmettre et de communiquer le Logiciel au public sur tout support et
|
||||
par tout moyen ainsi que le droit de mettre sur le march<63> <20> titre
|
||||
on<EFBFBD>reux ou gratuit, un ou des exemplaires du Logiciel par tout proc<6F>d<EFBFBD>.
|
||||
|
||||
Le Licenci<63> est autoris<69> <20> distribuer des copies du Logiciel, modifi<66> ou
|
||||
non, <20> des tiers dans les conditions ci-apr<70>s d<>taill<6C>es.
|
||||
|
||||
|
||||
5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION
|
||||
|
||||
Le Licenci<63> est autoris<69> <20> distribuer des copies conformes du Logiciel,
|
||||
sous forme de Code Source ou de Code Objet, <20> condition que cette
|
||||
distribution respecte les dispositions du Contrat dans leur totalit<69> et
|
||||
soit accompagn<67>e:
|
||||
|
||||
1. d'un exemplaire du Contrat,
|
||||
|
||||
2. d'un avertissement relatif <20> la restriction de garantie et de
|
||||
responsabilit<69> du Conc<6E>dant telle que pr<70>vue aux articles 8
|
||||
et 9,
|
||||
|
||||
et que, dans le cas o<> seul le Code Objet du Logiciel est redistribu<62>,
|
||||
le Licenci<63> permette aux futurs Licenci<63>s d'acc<63>der facilement au Code
|
||||
Source complet du Logiciel en indiquant les modalit<69>s d'acc<63>s, <20>tant
|
||||
entendu que le co<63>t additionnel d'acquisition du Code Source ne devra
|
||||
pas exc<78>der le simple co<63>t de transfert des donn<6E>es.
|
||||
|
||||
|
||||
5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE
|
||||
|
||||
Lorsque le Licenci<63> apporte une Contribution au Logiciel, les conditions
|
||||
de distribution du Logiciel Modifi<66> en r<>sultant sont alors soumises <20>
|
||||
l'int<6E>gralit<69> des dispositions du Contrat.
|
||||
|
||||
Le Licenci<63> est autoris<69> <20> distribuer le Logiciel Modifi<66>, sous forme de
|
||||
code source ou de code objet, <20> condition que cette distribution
|
||||
respecte les dispositions du Contrat dans leur totalit<69> et soit
|
||||
accompagn<EFBFBD>e:
|
||||
|
||||
1. d'un exemplaire du Contrat,
|
||||
|
||||
2. d'un avertissement relatif <20> la restriction de garantie et de
|
||||
responsabilit<69> du Conc<6E>dant telle que pr<70>vue aux articles 8
|
||||
et 9,
|
||||
|
||||
et que, dans le cas o<> seul le code objet du Logiciel Modifi<66> est
|
||||
redistribu<EFBFBD>, le Licenci<63> permette aux futurs Licenci<63>s d'acc<63>der
|
||||
facilement au code source complet du Logiciel Modifi<66> en indiquant les
|
||||
modalit<EFBFBD>s d'acc<63>s, <20>tant entendu que le co<63>t additionnel d'acquisition
|
||||
du code source ne devra pas exc<78>der le simple co<63>t de transfert des donn<6E>es.
|
||||
|
||||
|
||||
5.3.3 DISTRIBUTION DES MODULES EXTERNES
|
||||
|
||||
Lorsque le Licenci<63> a d<>velopp<70> un Module Externe les conditions du
|
||||
Contrat ne s'appliquent pas <20> ce Module Externe, qui peut <20>tre distribu<62>
|
||||
sous un contrat de licence diff<66>rent.
|
||||
|
||||
|
||||
5.3.4 COMPATIBILITE AVEC LA LICENCE GNU GPL
|
||||
|
||||
Le Licenci<63> peut inclure un code soumis aux dispositions d'une des
|
||||
versions de la licence GNU GPL dans le Logiciel modifi<66> ou non et
|
||||
distribuer l'ensemble sous les conditions de la m<>me version de la
|
||||
licence GNU GPL.
|
||||
|
||||
Le Licenci<63> peut inclure le Logiciel modifi<66> ou non dans un code soumis
|
||||
aux dispositions d'une des versions de la licence GNU GPL et distribuer
|
||||
l'ensemble sous les conditions de la m<>me version de la licence GNU GPL.
|
||||
|
||||
|
||||
Article 6 - PROPRIETE INTELLECTUELLE
|
||||
|
||||
|
||||
6.1 SUR LE LOGICIEL INITIAL
|
||||
|
||||
Le Titulaire est d<>tenteur des droits patrimoniaux sur le Logiciel
|
||||
Initial. Toute utilisation du Logiciel Initial est soumise au respect
|
||||
des conditions dans lesquelles le Titulaire a choisi de diffuser son
|
||||
oeuvre et nul autre n'a la facult<6C> de modifier les conditions de
|
||||
diffusion de ce Logiciel Initial.
|
||||
|
||||
Le Titulaire s'engage <20> ce que le Logiciel Initial reste au moins r<>gi
|
||||
par le Contrat et ce, pour la dur<75>e vis<69>e <20> l'article 4.2.
|
||||
|
||||
|
||||
6.2 SUR LES CONTRIBUTIONS
|
||||
|
||||
Le Licenci<63> qui a d<>velopp<70> une Contribution est titulaire sur celle-ci
|
||||
des droits de propri<72>t<EFBFBD> intellectuelle dans les conditions d<>finies par
|
||||
la l<>gislation applicable.
|
||||
|
||||
|
||||
6.3 SUR LES MODULES EXTERNES
|
||||
|
||||
Le Licenci<63> qui a d<>velopp<70> un Module Externe est titulaire sur celui-ci
|
||||
des droits de propri<72>t<EFBFBD> intellectuelle dans les conditions d<>finies par
|
||||
la l<>gislation applicable et reste libre du choix du contrat r<>gissant
|
||||
sa diffusion.
|
||||
|
||||
|
||||
6.4 DISPOSITIONS COMMUNES
|
||||
|
||||
Le Licenci<63> s'engage express<73>ment:
|
||||
|
||||
1. <20> ne pas supprimer ou modifier de quelque mani<6E>re que ce soit les
|
||||
mentions de propri<72>t<EFBFBD> intellectuelle appos<6F>es sur le Logiciel;
|
||||
|
||||
2. <20> reproduire <20> l'identique lesdites mentions de propri<72>t<EFBFBD>
|
||||
intellectuelle sur les copies du Logiciel modifi<66> ou non.
|
||||
|
||||
Le Licenci<63> s'engage <20> ne pas porter atteinte, directement ou
|
||||
indirectement, aux droits de propri<72>t<EFBFBD> intellectuelle du Titulaire et/ou
|
||||
des Contributeurs sur le Logiciel et <20> prendre, le cas <20>ch<63>ant, <20>
|
||||
l'<27>gard de son personnel toutes les mesures n<>cessaires pour assurer le
|
||||
respect des dits droits de propri<72>t<EFBFBD> intellectuelle du Titulaire et/ou
|
||||
des Contributeurs.
|
||||
|
||||
|
||||
Article 7 - SERVICES ASSOCIES
|
||||
|
||||
7.1 Le Contrat n'oblige en aucun cas le Conc<6E>dant <20> la r<>alisation de
|
||||
prestations d'assistance technique ou de maintenance du Logiciel.
|
||||
|
||||
Cependant le Conc<6E>dant reste libre de proposer ce type de services. Les
|
||||
termes et conditions d'une telle assistance technique et/ou d'une telle
|
||||
maintenance seront alors d<>termin<69>s dans un acte s<>par<61>. Ces actes de
|
||||
maintenance et/ou assistance technique n'engageront que la seule
|
||||
responsabilit<EFBFBD> du Conc<6E>dant qui les propose.
|
||||
|
||||
7.2 De m<>me, tout Conc<6E>dant est libre de proposer, sous sa seule
|
||||
responsabilit<EFBFBD>, <20> ses licenci<63>s une garantie, qui n'engagera que lui,
|
||||
lors de la redistribution du Logiciel et/ou du Logiciel Modifi<66> et ce,
|
||||
dans les conditions qu'il souhaite. Cette garantie et les modalit<69>s
|
||||
financi<EFBFBD>res de son application feront l'objet d'un acte s<>par<61> entre le
|
||||
Conc<EFBFBD>dant et le Licenci<63>.
|
||||
|
||||
|
||||
Article 8 - RESPONSABILITE
|
||||
|
||||
8.1 Sous r<>serve des dispositions de l'article 8.2, le Licenci<63> a la
|
||||
facult<EFBFBD>, sous r<>serve de prouver la faute du Conc<6E>dant concern<72>, de
|
||||
solliciter la r<>paration du pr<70>judice direct qu'il subirait du fait du
|
||||
Logiciel et dont il apportera la preuve.
|
||||
|
||||
8.2 La responsabilit<69> du Conc<6E>dant est limit<69>e aux engagements pris en
|
||||
application du Contrat et ne saurait <20>tre engag<61>e en raison notamment:
|
||||
(i) des dommages dus <20> l'inex<65>cution, totale ou partielle, de ses
|
||||
obligations par le Licenci<63>, (ii) des dommages directs ou indirects
|
||||
d<EFBFBD>coulant de l'utilisation ou des performances du Logiciel subis par le
|
||||
Licenci<EFBFBD> et (iii) plus g<>n<EFBFBD>ralement d'un quelconque dommage indirect. En
|
||||
particulier, les Parties conviennent express<73>ment que tout pr<70>judice
|
||||
financier ou commercial (par exemple perte de donn<6E>es, perte de
|
||||
b<EFBFBD>n<EFBFBD>fices, perte d'exploitation, perte de client<6E>le ou de commandes,
|
||||
manque <20> gagner, trouble commercial quelconque) ou toute action dirig<69>e
|
||||
contre le Licenci<63> par un tiers, constitue un dommage indirect et
|
||||
n'ouvre pas droit <20> r<>paration par le Conc<6E>dant.
|
||||
|
||||
|
||||
Article 9 - GARANTIE
|
||||
|
||||
9.1 Le Licenci<63> reconna<6E>t que l'<27>tat actuel des connaissances
|
||||
scientifiques et techniques au moment de la mise en circulation du
|
||||
Logiciel ne permet pas d'en tester et d'en v<>rifier toutes les
|
||||
utilisations ni de d<>tecter l'existence d'<27>ventuels d<>fauts. L'attention
|
||||
du Licenci<63> a <20>t<EFBFBD> attir<69>e sur ce point sur les risques associ<63>s au
|
||||
chargement, <20> l'utilisation, la modification et/ou au d<>veloppement et <20>
|
||||
la reproduction du Logiciel qui sont r<>serv<72>s <20> des utilisateurs avertis.
|
||||
|
||||
Il rel<65>ve de la responsabilit<69> du Licenci<63> de contr<74>ler, par tous
|
||||
moyens, l'ad<61>quation du produit <20> ses besoins, son bon fonctionnement et
|
||||
de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.
|
||||
|
||||
9.2 Le Conc<6E>dant d<>clare de bonne foi <20>tre en droit de conc<6E>der
|
||||
l'ensemble des droits attach<63>s au Logiciel (comprenant notamment les
|
||||
droits vis<69>s <20> l'article 5).
|
||||
|
||||
9.3 Le Licenci<63> reconna<6E>t que le Logiciel est fourni "en l'<27>tat" par le
|
||||
Conc<EFBFBD>dant sans autre garantie, expresse ou tacite, que celle pr<70>vue <20>
|
||||
l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale,
|
||||
son caract<63>re s<>curis<69>, innovant ou pertinent.
|
||||
|
||||
En particulier, le Conc<6E>dant ne garantit pas que le Logiciel est exempt
|
||||
d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible
|
||||
avec l'<27>quipement du Licenci<63> et sa configuration logicielle ni qu'il
|
||||
remplira les besoins du Licenci<63>.
|
||||
|
||||
9.4 Le Conc<6E>dant ne garantit pas, de mani<6E>re expresse ou tacite, que le
|
||||
Logiciel ne porte pas atteinte <20> un quelconque droit de propri<72>t<EFBFBD>
|
||||
intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout
|
||||
autre droit de propri<72>t<EFBFBD>. Ainsi, le Conc<6E>dant exclut toute garantie au
|
||||
profit du Licenci<63> contre les actions en contrefa<66>on qui pourraient <20>tre
|
||||
diligent<EFBFBD>es au titre de l'utilisation, de la modification, et de la
|
||||
redistribution du Logiciel. N<>anmoins, si de telles actions sont
|
||||
exerc<EFBFBD>es contre le Licenci<63>, le Conc<6E>dant lui apportera son aide
|
||||
technique et juridique pour sa d<>fense. Cette aide technique et
|
||||
juridique est d<>termin<69>e au cas par cas entre le Conc<6E>dant concern<72> et
|
||||
le Licenci<63> dans le cadre d'un protocole d'accord. Le Conc<6E>dant d<>gage
|
||||
toute responsabilit<69> quant <20> l'utilisation de la d<>nomination du
|
||||
Logiciel par le Licenci<63>. Aucune garantie n'est apport<72>e quant <20>
|
||||
l'existence de droits ant<6E>rieurs sur le nom du Logiciel et sur
|
||||
l'existence d'une marque.
|
||||
|
||||
|
||||
Article 10 - RESILIATION
|
||||
|
||||
10.1 En cas de manquement par le Licenci<63> aux obligations mises <20> sa
|
||||
charge par le Contrat, le Conc<6E>dant pourra r<>silier de plein droit le
|
||||
Contrat trente (30) jours apr<70>s notification adress<73>e au Licenci<63> et
|
||||
rest<EFBFBD>e sans effet.
|
||||
|
||||
10.2 Le Licenci<63> dont le Contrat est r<>sili<6C> n'est plus autoris<69> <20>
|
||||
utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les
|
||||
licences qu'il aura conc<6E>d<EFBFBD>es ant<6E>rieurement <20> la r<>siliation du Contrat
|
||||
resteront valides sous r<>serve qu'elles aient <20>t<EFBFBD> effectu<74>es en
|
||||
conformit<EFBFBD> avec le Contrat.
|
||||
|
||||
|
||||
Article 11 - DISPOSITIONS DIVERSES
|
||||
|
||||
|
||||
11.1 CAUSE EXTERIEURE
|
||||
|
||||
Aucune des Parties ne sera responsable d'un retard ou d'une d<>faillance
|
||||
d'ex<65>cution du Contrat qui serait d<> <20> un cas de force majeure, un cas
|
||||
fortuit ou une cause ext<78>rieure, telle que, notamment, le mauvais
|
||||
fonctionnement ou les interruptions du r<>seau <20>lectrique ou de
|
||||
t<EFBFBD>l<EFBFBD>communication, la paralysie du r<>seau li<6C>e <20> une attaque
|
||||
informatique, l'intervention des autorit<69>s gouvernementales, les
|
||||
catastrophes naturelles, les d<>g<EFBFBD>ts des eaux, les tremblements de terre,
|
||||
le feu, les explosions, les gr<67>ves et les conflits sociaux, l'<27>tat de
|
||||
guerre...
|
||||
|
||||
11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou
|
||||
plusieurs occasions de se pr<70>valoir d'une ou plusieurs dispositions du
|
||||
Contrat, ne pourra en aucun cas impliquer renonciation par la Partie
|
||||
int<EFBFBD>ress<EFBFBD>e <20> s'en pr<70>valoir ult<6C>rieurement.
|
||||
|
||||
11.3 Le Contrat annule et remplace toute convention ant<6E>rieure, <20>crite
|
||||
ou orale, entre les Parties sur le m<>me objet et constitue l'accord
|
||||
entier entre les Parties sur cet objet. Aucune addition ou modification
|
||||
aux termes du Contrat n'aura d'effet <20> l'<27>gard des Parties <20> moins
|
||||
d'<27>tre faite par <20>crit et sign<67>e par leurs repr<70>sentants d<>ment habilit<69>s.
|
||||
|
||||
11.4 Dans l'hypoth<74>se o<> une ou plusieurs des dispositions du Contrat
|
||||
s'av<61>rerait contraire <20> une loi ou <20> un texte applicable, existants ou
|
||||
futurs, cette loi ou ce texte pr<70>vaudrait, et les Parties feraient les
|
||||
amendements n<>cessaires pour se conformer <20> cette loi ou <20> ce texte.
|
||||
Toutes les autres dispositions resteront en vigueur. De m<>me, la
|
||||
nullit<EFBFBD>, pour quelque raison que ce soit, d'une des dispositions du
|
||||
Contrat ne saurait entra<72>ner la nullit<69> de l'ensemble du Contrat.
|
||||
|
||||
|
||||
11.5 LANGUE
|
||||
|
||||
Le Contrat est r<>dig<69> en langue fran<61>aise et en langue anglaise, ces
|
||||
deux versions faisant <20>galement foi.
|
||||
|
||||
|
||||
Article 12 - NOUVELLES VERSIONS DU CONTRAT
|
||||
|
||||
12.1 Toute personne est autoris<69>e <20> copier et distribuer des copies de
|
||||
ce Contrat.
|
||||
|
||||
12.2 Afin d'en pr<70>server la coh<6F>rence, le texte du Contrat est prot<6F>g<EFBFBD>
|
||||
et ne peut <20>tre modifi<66> que par les auteurs de la licence, lesquels se
|
||||
r<EFBFBD>servent le droit de publier p<>riodiquement des mises <20> jour ou de
|
||||
nouvelles versions du Contrat, qui poss<73>deront chacune un num<75>ro
|
||||
distinct. Ces versions ult<6C>rieures seront susceptibles de prendre en
|
||||
compte de nouvelles probl<62>matiques rencontr<74>es par les logiciels libres.
|
||||
|
||||
12.3 Tout Logiciel diffus<75> sous une version donn<6E>e du Contrat ne pourra
|
||||
faire l'objet d'une diffusion ult<6C>rieure que sous la m<>me version du
|
||||
Contrat ou une version post<73>rieure, sous r<>serve des dispositions de
|
||||
l'article 5.3.4.
|
||||
|
||||
|
||||
Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE
|
||||
|
||||
13.1 Le Contrat est r<>gi par la loi fran<61>aise. Les Parties conviennent
|
||||
de tenter de r<>gler <20> l'amiable les diff<66>rends ou litiges qui
|
||||
viendraient <20> se produire par suite ou <20> l'occasion du Contrat.
|
||||
|
||||
13.2 A d<>faut d'accord amiable dans un d<>lai de deux (2) mois <20> compter
|
||||
de leur survenance et sauf situation relevant d'une proc<6F>dure d'urgence,
|
||||
les diff<66>rends ou litiges seront port<72>s par la Partie la plus diligente
|
||||
devant les Tribunaux comp<6D>tents de Paris.
|
||||
|
||||
|
||||
Version 2.0 du 2006-09-05.
|
@ -40,7 +40,6 @@ def findPackage(root,base=None):
|
||||
|
||||
def findCython(root,base=None,pyrexs=None):
|
||||
setupdir = os.path.dirname(sys.argv[0])
|
||||
csourcedir = os.path.join(setupdir,"src")
|
||||
pyrexs=[]
|
||||
|
||||
if base is None:
|
||||
@ -54,7 +53,6 @@ def findCython(root,base=None,pyrexs=None):
|
||||
[pyrex]
|
||||
)
|
||||
)
|
||||
pyrexs[-1].include_dirs.append(csourcedir)
|
||||
try:
|
||||
cfiles = os.path.splitext(pyrex)[0]+".cfiles"
|
||||
cfilesdir = os.path.dirname(cfiles)
|
||||
|
@ -36,7 +36,7 @@ extensions = [
|
||||
'sphinx.ext.pngmath',
|
||||
'sphinx.ext.ifconfig',
|
||||
'sphinx.ext.viewcode',
|
||||
'breathe',
|
||||
# 'breathe',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
@ -295,6 +295,4 @@ texinfo_documents = [
|
||||
sys.path.append( "breathe/" )
|
||||
breathe_projects = { "OBITools3": "doxygen/xml/" }
|
||||
breathe_default_project = "OBITools3"
|
||||
#breathe_projects_source = {
|
||||
# "auto" : ( "../src", ["obidms.h", "obiavl.h"] )
|
||||
# }
|
||||
|
||||
|
@ -11,7 +11,7 @@ OBITools3 documentation
|
||||
|
||||
Programming guidelines <guidelines>
|
||||
Data structures <data>
|
||||
Code documentation <code_doc/codedoc>
|
||||
|
||||
|
||||
Indices and tables
|
||||
------------------
|
||||
|
@ -4,7 +4,6 @@ OBITypes
|
||||
|
||||
|
||||
.. image:: ./UML/OBITypes_UML.png
|
||||
|
||||
:download:`html version of the OBITypes UML file <UML/OBITypes_UML.class.violet.html>`
|
||||
|
||||
|
||||
|
@ -1 +1 @@
|
||||
build/lib.macosx-10.6-intel-3.4
|
||||
build/lib.macosx-10.6-intel-3.5
|
||||
|
@ -21,9 +21,7 @@ default_config = { 'software' : "The OBITools",
|
||||
'log' : False,
|
||||
'loglevel' : 'INFO',
|
||||
'progress' : True,
|
||||
'defaultdms' : None,
|
||||
'inputview' : None,
|
||||
'outputview' : None
|
||||
'defaultdms' : None
|
||||
}
|
||||
|
||||
root_config_name='obi'
|
||||
|
Binary file not shown.
@ -1,9 +1,10 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from ..utils cimport str2bytes
|
||||
|
||||
cdef extern from "stdio.h":
|
||||
struct FILE
|
||||
int fprintf(FILE *stream, char *format, ...)
|
||||
int fputs(char *string, FILE *stream)
|
||||
FILE* stderr
|
||||
ctypedef unsigned int off_t "unsigned long long"
|
||||
|
||||
@ -52,7 +53,7 @@ cdef class ProgressBar:
|
||||
cdef bint ontty
|
||||
cdef int fd
|
||||
|
||||
cdef bytes _head
|
||||
cdef bytes head
|
||||
cdef char *chead
|
||||
|
||||
cdef object logger
|
||||
|
@ -6,9 +6,8 @@ Created on 27 mars 2016
|
||||
@author: coissac
|
||||
'''
|
||||
|
||||
from ..utils cimport str2bytes, bytes2str
|
||||
from .config cimport getConfiguration
|
||||
import sys
|
||||
from ..utils cimport bytes2str
|
||||
|
||||
cdef class ProgressBar:
|
||||
cdef clock_t clock(self):
|
||||
@ -24,7 +23,7 @@ cdef class ProgressBar:
|
||||
|
||||
def __init__(self,
|
||||
off_t maxi,
|
||||
dict config={},
|
||||
dict config,
|
||||
str head="",
|
||||
double seconde=0.1):
|
||||
self.starttime = self.clock()
|
||||
@ -35,18 +34,14 @@ cdef class ProgressBar:
|
||||
self.arrow = 0
|
||||
self.lastlog = 0
|
||||
|
||||
if not config:
|
||||
config=getConfiguration()
|
||||
|
||||
|
||||
self.ontty = sys.stderr.isatty()
|
||||
|
||||
if (maxi<=0):
|
||||
maxi=1
|
||||
|
||||
self.maxi = maxi
|
||||
self.head = head
|
||||
self.chead= self._head
|
||||
self.head = str2bytes(head)
|
||||
self.chead= self.head
|
||||
|
||||
|
||||
self.logger=config[config["__root_config__"]]["logger"]
|
||||
@ -109,43 +104,35 @@ cdef class ProgressBar:
|
||||
if self.ontty:
|
||||
fraction=<int>(percent * 50.)
|
||||
self.arrow=(self.arrow+1) % 4
|
||||
self.diese[fraction]=0
|
||||
self.spaces[50 - fraction]=0
|
||||
|
||||
if days:
|
||||
<void>fprintf(stderr,b'\r%s %5.1f %% |%.*s%c%.*s] remain : %d days %02d:%02d:%02d',
|
||||
<void>fprintf(stderr,b'\r%s %5.1f %% |%s%c%s] remain : %d days %02d:%02d:%02d',
|
||||
self.chead,
|
||||
percent*100,
|
||||
fraction,self.diese,
|
||||
self.wheel[self.arrow],
|
||||
50-fraction,self.spaces,
|
||||
self.diese,self.wheel[self.arrow],self.spaces,
|
||||
days,hour,minu,sec)
|
||||
else:
|
||||
<void>fprintf(stderr,b'\r%s %5.1f %% |%.*s%c%.*s] remain : %02d:%02d:%02d',
|
||||
<void>fprintf(stderr,b'\r%s %5.1f %% |%s%c%s] remain : %02d:%02d:%02d',
|
||||
self.chead,
|
||||
percent*100.,
|
||||
fraction,self.diese,
|
||||
self.wheel[self.arrow],
|
||||
50-fraction,self.spaces,
|
||||
self.diese,self.wheel[self.arrow],self.spaces,
|
||||
hour,minu,sec)
|
||||
self.diese[fraction]=b'#'
|
||||
self.spaces[50 - fraction]=b' '
|
||||
|
||||
tenth = int(percent * 10)
|
||||
if tenth != self.lastlog:
|
||||
twentyth = int(percent * 20)
|
||||
if twentyth != self.lastlog:
|
||||
|
||||
if self.ontty:
|
||||
<void>fputs(b'\n',stderr)
|
||||
<void>fprintf(stderr,b'\n')
|
||||
|
||||
self.logger.info('%s %5.1f %% remain : %02d:%02d:%02d' % (
|
||||
bytes2str(self._head),
|
||||
bytes2str(self.head),
|
||||
percent*100.,
|
||||
hour,minu,sec))
|
||||
self.lastlog=tenth
|
||||
self.lastlog=twentyth
|
||||
else:
|
||||
self.cycle+=1
|
||||
|
||||
property head:
|
||||
|
||||
def __get__(self):
|
||||
return self._head
|
||||
|
||||
def __set__(self,str value):
|
||||
self._head=str2bytes(value)
|
||||
self.chead=self._head
|
||||
|
@ -1,68 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.dms.dms import DMS # TODO cimport doesn't work
|
||||
from obitools3.dms.view.view import View # TODO cimport doesn't work
|
||||
|
||||
|
||||
__title__="Print a preview of a DMS, view, column...."
|
||||
|
||||
default_config = { 'inputview' : None,
|
||||
}
|
||||
|
||||
|
||||
# TODO make it work with URIs
|
||||
|
||||
def addOptions(parser):
|
||||
|
||||
# TODO put this common group somewhere else but I don't know where
|
||||
group=parser.add_argument_group('DMS and view options')
|
||||
|
||||
group.add_argument('--default-dms','-d',
|
||||
action="store", dest="obi:defaultdms",
|
||||
metavar='<DMS NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the default DMS for reading and writing data.")
|
||||
|
||||
group.add_argument('--view','-v',
|
||||
action="store", dest="obi:view",
|
||||
metavar='<VIEW NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the view.")
|
||||
|
||||
|
||||
# group=parser.add_argument_group('obi check specific options')
|
||||
|
||||
# group.add_argument('--print',
|
||||
# action="store", dest="less:print",
|
||||
# metavar='<N>',
|
||||
# default=None,
|
||||
# type=int,
|
||||
# help="Print N sequences (default: 10)")
|
||||
|
||||
|
||||
def run(config):
|
||||
|
||||
# Open DMS
|
||||
d = DMS.open(config['obi']['defaultdms'])
|
||||
|
||||
# Open input view uif there is one
|
||||
if config['obi']['inputview'] is not None :
|
||||
iview = View.open(d, config['obi']['inputview'])
|
||||
print(repr(iview))
|
||||
|
||||
else :
|
||||
for v in d :
|
||||
print(repr(v))
|
||||
|
||||
d.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,109 +0,0 @@
|
||||
# from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport
|
||||
# from obitools3.dms.dms import OBIDMS # TODO cimport doesn't work
|
||||
# from obitools3.utils cimport bytes2str
|
||||
#
|
||||
# import time
|
||||
# import re
|
||||
|
||||
|
||||
def run(config):
|
||||
pass
|
||||
|
||||
# __title__="Export a NUC_SEQS view to a fasta or fastq file"
|
||||
#
|
||||
#
|
||||
# default_config = { 'inputview' : None,
|
||||
# }
|
||||
#
|
||||
# def addOptions(parser):
|
||||
#
|
||||
# # TODO put this common group somewhere else but I don't know where
|
||||
# group=parser.add_argument_group('DMS and view options')
|
||||
#
|
||||
# group.add_argument('--default-dms','-d',
|
||||
# action="store", dest="obi:defaultdms",
|
||||
# metavar='<DMS NAME>',
|
||||
# default=None,
|
||||
# type=str,
|
||||
# help="Name of the default DMS for reading and writing data.")
|
||||
#
|
||||
# group.add_argument('--input-view','-i',
|
||||
# action="store", dest="obi:inputview",
|
||||
# metavar='<INPUT VIEW NAME>',
|
||||
# default=None,
|
||||
# type=str,
|
||||
# help="Name of the input view, either raw if the view is in the default DMS,"
|
||||
# " or in the form 'dms:view' if it is in another DMS.")
|
||||
#
|
||||
# group=parser.add_argument_group('obi export specific options')
|
||||
#
|
||||
# group.add_argument('--format','-f',
|
||||
# action="store", dest="export:format",
|
||||
# metavar='<FORMAT>',
|
||||
# default="fasta",
|
||||
# type=str,
|
||||
# help="Export in the format <FORMAT>, 'fasta' or 'fastq'. Default: 'fasta'.") # TODO export in csv
|
||||
#
|
||||
# def run(config):
|
||||
#
|
||||
# # TODO import doesn't work
|
||||
# NUC_SEQUENCE_COLUMN = "NUC_SEQ"
|
||||
# ID_COLUMN = "ID"
|
||||
# DEFINITION_COLUMN = "DEFINITION"
|
||||
# QUALITY_COLUMN = "QUALITY"
|
||||
#
|
||||
# special_columns = [NUC_SEQUENCE_COLUMN, ID_COLUMN, DEFINITION_COLUMN, QUALITY_COLUMN]
|
||||
#
|
||||
# # Open DMS
|
||||
# d = OBIDMS(config['obi']['defaultdms'])
|
||||
#
|
||||
# # Open input view
|
||||
# iview = d.open_view(config['obi']['inputview'])
|
||||
#
|
||||
# print(iview.type)
|
||||
#
|
||||
# # TODO check that the view has the type NUC_SEQS
|
||||
# if ((config['export']['format'] == "fasta") or (config['export']['format'] == "fastq")) and (iview.type != "NUC_SEQS_VIEW") : # TODO find a way to import those macros
|
||||
# raise Exception("Error: the view to export in fasta or fastq format is not a NUC_SEQS view")
|
||||
#
|
||||
# # Initialize the progress bar
|
||||
# pb = ProgressBar(len(iview), config, seconde=5)
|
||||
#
|
||||
# i=0
|
||||
# for seq in iview :
|
||||
# pb(i)
|
||||
#
|
||||
# toprint = ">"+seq.id+" "
|
||||
#
|
||||
# for col_name in seq :
|
||||
# if col_name not in special_columns :
|
||||
# toprint = toprint + col_name + "=" + str(seq[col_name]) + "; "
|
||||
#
|
||||
# if DEFINITION_COLUMN in seq :
|
||||
# toprint = toprint + seq.definition
|
||||
#
|
||||
# nucseq = bytes2str(seq.nuc_seq)
|
||||
#
|
||||
# if config['export']['format'] == "fasta" :
|
||||
# nucseq = re.sub("(.{60})", "\\1\n", nucseq, 0, re.DOTALL)
|
||||
#
|
||||
# toprint = toprint + "\n" + nucseq
|
||||
#
|
||||
# if config['export']['format'] == "fastq" :
|
||||
# toprint = toprint + "\n" + "+" + "\n" + seq.get_str_quality()
|
||||
#
|
||||
# print(toprint)
|
||||
# i+=1
|
||||
#
|
||||
# iview.close()
|
||||
# d.close()
|
||||
#
|
||||
# print("Done.")
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
@ -1,96 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport
|
||||
from obitools3.dms.dms import DMS # TODO cimport doesn't work
|
||||
from obitools3.dms.view.view import View, Line_selection # TODO cimport doesn't work
|
||||
|
||||
from functools import reduce
|
||||
import time
|
||||
|
||||
__title__="Grep view lines that match the given predicates"
|
||||
|
||||
default_config = { 'inputview' : None,
|
||||
'outputview' : None
|
||||
}
|
||||
|
||||
def addOptions(parser):
|
||||
|
||||
# TODO put this common group somewhere else but I don't know where
|
||||
group=parser.add_argument_group('DMS and view options')
|
||||
|
||||
group.add_argument('--default-dms','-d',
|
||||
action="store", dest="obi:defaultdms",
|
||||
metavar='<DMS NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the default DMS for reading and writing data.")
|
||||
|
||||
group.add_argument('--input-view','-i',
|
||||
action="store", dest="obi:inputview",
|
||||
metavar='<INPUT VIEW NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the input view, either raw if the view is in the default DMS,"
|
||||
" or in the form 'dms:view' if it is in another DMS.")
|
||||
|
||||
group.add_argument('--output-view','-o',
|
||||
action="store", dest="obi:outputview",
|
||||
metavar='<OUTPUT VIEW NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the output view, either raw if the view is in the default DMS,"
|
||||
" or in the form 'dms:view' if it is in another DMS.")
|
||||
|
||||
|
||||
group=parser.add_argument_group('obi grep specific options')
|
||||
|
||||
group.add_argument('--predicate','-p',
|
||||
action="append", dest="grep:predicates",
|
||||
metavar='<PREDICATE>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Grep lines that match the given python expression on <line> or <sequence>.")
|
||||
|
||||
|
||||
def run(config):
|
||||
|
||||
# Open DMS
|
||||
d = DMS.open(config['obi']['defaultdms'])
|
||||
|
||||
# Open input view 1
|
||||
iview = View.open(d, config['obi']['inputview'])
|
||||
|
||||
# Initialize the progress bar
|
||||
pb = ProgressBar(len(iview), config, seconde=5)
|
||||
|
||||
# Apply filter
|
||||
selection = Line_selection(iview)
|
||||
for i in range(len(iview)) :
|
||||
pb(i)
|
||||
line = iview[i]
|
||||
|
||||
loc_env = {'sequence': line, 'line': line} # TODO add taxonomy
|
||||
|
||||
good = (reduce(lambda bint x, bint y: x and y,
|
||||
(bool(eval(p, loc_env, line))
|
||||
for p in config['grep']['predicates']), True))
|
||||
|
||||
if good :
|
||||
selection.append(i)
|
||||
|
||||
# Create output view with the line selection
|
||||
oview = selection.materialize(config['obi']['outputview'], comments="obi grep: "+str(config['grep']['predicates'])+"\n")
|
||||
|
||||
print("\n")
|
||||
print(repr(oview))
|
||||
|
||||
d.close()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,33 +1,15 @@
|
||||
#cython: language_level=3
|
||||
|
||||
# TODO cimport generate errors with argument numbers, but without them some variables can't be declared
|
||||
|
||||
from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport
|
||||
from obitools3.files.universalopener cimport uopen
|
||||
from obitools3.parsers.fasta import fastaIterator
|
||||
from obitools3.parsers.fastq import fastqIterator
|
||||
from obitools3.dms.dms import DMS # TODO cimport doesn't work
|
||||
from obitools3.dms.view.view cimport View
|
||||
from obitools3.dms.view.typed_view.view_NUC_SEQS import View_NUC_SEQS # TODO cimport doesn't work
|
||||
from obitools3.dms.column.column cimport Column
|
||||
from obitools3.obidms._obidms import OBIDMS
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
get_obitype, \
|
||||
update_obitype
|
||||
|
||||
from obitools3.dms.capi.obitypes cimport obitype_t, \
|
||||
OBI_VOID
|
||||
|
||||
from obitools3.dms.capi.obierrno cimport obi_errno
|
||||
|
||||
import time
|
||||
|
||||
import pickle
|
||||
__title__="Counts sequences in a sequence set"
|
||||
|
||||
|
||||
__title__="Imports sequences from different formats into a DMS"
|
||||
|
||||
|
||||
default_config = { 'destview' : None,
|
||||
'skip' : 0,
|
||||
'only' : None,
|
||||
@ -42,7 +24,7 @@ def addOptions(parser):
|
||||
metavar='<FILENAME>',
|
||||
nargs='?',
|
||||
default=None,
|
||||
help='Name of the sequence file to import' )
|
||||
help='sequence file name to be imported' )
|
||||
|
||||
group=parser.add_argument_group('obi import specific options')
|
||||
|
||||
@ -52,7 +34,8 @@ def addOptions(parser):
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the default DMS for reading and writing data")
|
||||
|
||||
|
||||
|
||||
group.add_argument('--destination-view','-v',
|
||||
action="store", dest="import:destview",
|
||||
metavar='<VIEW NAME>',
|
||||
@ -61,25 +44,27 @@ def addOptions(parser):
|
||||
required=True,
|
||||
help="Name of the default DMS for reading and writing data")
|
||||
|
||||
group=parser.add_argument_group('obi import specific options')
|
||||
|
||||
group.add_argument('--skip',
|
||||
action="store", dest="import:skip",
|
||||
metavar='<N>',
|
||||
default=0,
|
||||
default=None,
|
||||
type=int,
|
||||
help="Skip the N first sequences")
|
||||
help="skip the N first sequences")
|
||||
|
||||
group.add_argument('--only',
|
||||
action="store", dest="import:only",
|
||||
metavar='<N>',
|
||||
default=None,
|
||||
type=int,
|
||||
help="Treat only N sequences")
|
||||
help="treat only N sequences")
|
||||
|
||||
group.add_argument('--skip-on-error',
|
||||
action="store_true", dest="import:skiperror",
|
||||
default=None,
|
||||
help="Skip sequence entries with parse error")
|
||||
|
||||
|
||||
group.add_argument('--fasta',
|
||||
action="store_const", dest="import:seqinformat",
|
||||
default=None,
|
||||
@ -97,188 +82,55 @@ def addOptions(parser):
|
||||
default=None,
|
||||
const='nuc',
|
||||
help="Input file contains nucleic sequences")
|
||||
|
||||
|
||||
group.add_argument('--prot',
|
||||
action="store_const", dest="import:moltype",
|
||||
default=None,
|
||||
const='pep',
|
||||
help="Input file contains protein sequences")
|
||||
|
||||
|
||||
# TODO: Handling of NA values. Check None. Specify in doc? None or NA? Possiblity to specify in option?
|
||||
# look in R read.table option to specify NA value
|
||||
|
||||
|
||||
def run(config):
|
||||
|
||||
cdef int i
|
||||
cdef type value_type
|
||||
cdef obitype_t value_obitype
|
||||
cdef obitype_t old_type
|
||||
cdef obitype_t new_type
|
||||
cdef bint get_quality
|
||||
cdef bint NUC_SEQS_view
|
||||
cdef int nb_elts
|
||||
cdef object d
|
||||
cdef View view
|
||||
cdef object iseq
|
||||
cdef object seq
|
||||
cdef object inputs
|
||||
cdef Column id_col
|
||||
cdef Column def_col
|
||||
cdef Column seq_col
|
||||
cdef Column qual_col
|
||||
cdef Column old_column
|
||||
cdef bint rewrite
|
||||
cdef dict dcols
|
||||
cdef int skipping
|
||||
cdef str tag
|
||||
cdef object value
|
||||
cdef list elt_names
|
||||
cdef int old_nb_elements_per_line
|
||||
cdef int new_nb_elements_per_line
|
||||
cdef list old_elements_names
|
||||
cdef list new_elements_names
|
||||
cdef ProgressBar pb
|
||||
global obi_errno
|
||||
|
||||
pb = ProgressBar(1000000, config, seconde=5) # TODO should be number of records in file
|
||||
|
||||
pb = ProgressBar(35000000,config,seconde=5)
|
||||
|
||||
inputs = uopen(config['import']['filename'])
|
||||
|
||||
# Create or open DMS
|
||||
try:
|
||||
d = DMS.test_open(config['obi']['defaultdms'])
|
||||
except :
|
||||
d = DMS.new(config['obi']['defaultdms'])
|
||||
|
||||
get_quality = False
|
||||
NUC_SEQS_view = False
|
||||
|
||||
if config['import']['seqinformat']=='fasta':
|
||||
get_quality = False
|
||||
NUC_SEQS_view = True
|
||||
iseq = fastaIterator(inputs)
|
||||
view = View_NUC_SEQS.new(d, config['import']['destview'], quality=get_quality)
|
||||
view_type="NUC_SEQS_VIEW"
|
||||
elif config['import']['seqinformat']=='fastq':
|
||||
get_quality = True
|
||||
NUC_SEQS_view = True
|
||||
iseq = fastqIterator(inputs)
|
||||
view = View_NUC_SEQS.new(d, config['import']['destview'], quality=get_quality)
|
||||
view_type="NUC_SEQS_VIEW"
|
||||
else:
|
||||
raise RuntimeError('File format not handled')
|
||||
|
||||
# Save basic columns in variables for optimization
|
||||
if NUC_SEQS_view :
|
||||
id_col = view["ID"]
|
||||
def_col = view["DEFINITION"]
|
||||
seq_col = view["NUC_SEQ"]
|
||||
if get_quality :
|
||||
qual_col = view["QUALITY"]
|
||||
raise RuntimeError('No file format specified')
|
||||
|
||||
dcols = {}
|
||||
# Temporary way to handle NA values
|
||||
#NA_list = ["nan"]
|
||||
|
||||
# Create DMS
|
||||
d = OBIDMS(config['obi']['defaultdms'])
|
||||
|
||||
# Create view
|
||||
view = d.new_view(config['import']['destview'], view_type=view_type)
|
||||
|
||||
skipping = 0
|
||||
i = 0
|
||||
for seq in iseq :
|
||||
if skipping < config['import']['skip'] : # TODO not efficient because sequences are parsed
|
||||
skipping+=1
|
||||
elif i == config['import']['only'] :
|
||||
break
|
||||
else :
|
||||
pb(i)
|
||||
if NUC_SEQS_view :
|
||||
id_col[i] = seq['id']
|
||||
def_col[i] = seq['definition']
|
||||
seq_col[i] = seq['sequence']
|
||||
if get_quality :
|
||||
qual_col[i] = seq['quality']
|
||||
|
||||
for tag in seq['tags'] :
|
||||
|
||||
value = seq['tags'][tag]
|
||||
|
||||
if tag not in dcols :
|
||||
|
||||
value_type = type(value)
|
||||
nb_elts = 1
|
||||
value_obitype = OBI_VOID
|
||||
|
||||
if value_type == dict or value_type == list :
|
||||
nb_elts = len(value)
|
||||
elt_names = list(value)
|
||||
else :
|
||||
nb_elts = 1
|
||||
elt_names = None
|
||||
|
||||
value_obitype = get_obitype(value)
|
||||
|
||||
if value_obitype != OBI_VOID :
|
||||
dcols[tag] = (Column.new_column(view, tag, value_obitype, nb_elements_per_line=nb_elts, elements_names=elt_names), value_obitype)
|
||||
for seq in iseq:
|
||||
pb(i)
|
||||
view[i].set_id(seq['id'])
|
||||
view[i].set_definition(seq['definition'])
|
||||
view[i].set_sequence(seq['sequence'])
|
||||
for tag in seq['tags'] :
|
||||
#print(tag, seq['tags'][tag])
|
||||
#if seq['tags'][tag] not in NA_list :
|
||||
view[i][tag] = seq['tags'][tag]
|
||||
i+=1
|
||||
|
||||
# Fill value
|
||||
dcols[tag][0][i] = value
|
||||
|
||||
# TODO else log error?
|
||||
|
||||
else :
|
||||
|
||||
rewrite = False
|
||||
|
||||
# Check type adequation
|
||||
old_type = dcols[tag][1]
|
||||
new_type = OBI_VOID
|
||||
new_type = update_obitype(old_type, value)
|
||||
if old_type != new_type :
|
||||
rewrite = True
|
||||
|
||||
try:
|
||||
# Fill value
|
||||
dcols[tag][0][i] = value
|
||||
|
||||
except IndexError :
|
||||
|
||||
value_type = type(value)
|
||||
old_column = dcols[tag][0]
|
||||
old_nb_elements_per_line = old_column.nb_elements_per_line
|
||||
new_nb_elements_per_line = 0
|
||||
old_elements_names = old_column.elements_names
|
||||
new_elements_names = None
|
||||
|
||||
#####################################################################
|
||||
|
||||
# Check the length and keys of column lines if needed
|
||||
if value_type == dict : # Check dictionary keys
|
||||
for k in value :
|
||||
if k not in old_elements_names :
|
||||
new_elements_names = list(value)
|
||||
rewrite = True
|
||||
break
|
||||
|
||||
elif value_type == list or value_type == tuple : # Check vector length
|
||||
if old_nb_elements_per_line < len(value) :
|
||||
new_nb_elements_per_line = len(value)
|
||||
rewrite = True
|
||||
|
||||
#####################################################################
|
||||
|
||||
if rewrite :
|
||||
if new_nb_elements_per_line == 0 and new_elements_names is not None :
|
||||
new_nb_elements_per_line = len(new_elements_names)
|
||||
|
||||
dcols[tag] = (view.rewrite_column_with_diff_attributes(old_column.name,
|
||||
new_data_type=new_type,
|
||||
new_nb_elements_per_line=new_nb_elements_per_line,
|
||||
new_elements_names=new_elements_names),
|
||||
value_obitype)
|
||||
|
||||
# Reset obierrno
|
||||
obi_errno = 0
|
||||
|
||||
# Fill value
|
||||
dcols[tag][0][i] = value
|
||||
|
||||
i+=1
|
||||
|
||||
print("\n")
|
||||
#print(view)
|
||||
print(view.__repr__())
|
||||
|
||||
d.close()
|
||||
|
||||
view.save_and_close()
|
||||
d.close()
|
||||
|
||||
print("Done.")
|
||||
|
@ -1,236 +0,0 @@
|
||||
#cython: language_level=3
|
||||
#
|
||||
# from obitools3.apps.progress cimport ProgressBar # @UnresolvedImport
|
||||
# from obitools3.dms.dms import OBIDMS # TODO cimport doesn't work
|
||||
# from obitools3.utils cimport str2bytes
|
||||
#
|
||||
# from obitools3.dms.capi.obialign cimport obi_lcs_align_one_column, \
|
||||
# obi_lcs_align_two_columns
|
||||
#
|
||||
#
|
||||
# import time
|
||||
#
|
||||
# __title__="Aligns one sequence column with itself or two sequence columns"
|
||||
#
|
||||
#
|
||||
# default_config = { 'inputview' : None,
|
||||
# }
|
||||
#
|
||||
# def addOptions(parser):
|
||||
#
|
||||
# # TODO put this common group somewhere else but I don't know where.
|
||||
# # Also some options should probably be in another group
|
||||
# group=parser.add_argument_group('DMS and view options')
|
||||
#
|
||||
# group.add_argument('--default-dms', '-d',
|
||||
# action="store", dest="obi:defaultdms",
|
||||
# metavar='<DMS NAME>',
|
||||
# default=None,
|
||||
# type=str,
|
||||
# help="Name of the default DMS for reading and writing data.")
|
||||
#
|
||||
# group.add_argument('--input-view-1', '-i',
|
||||
# action="store", dest="obi:inputview1",
|
||||
# metavar='<INPUT VIEW NAME>',
|
||||
# default=None,
|
||||
# type=str,
|
||||
# help="Name of the (first) input view.")
|
||||
#
|
||||
# group.add_argument('--input-view-2', '-I',
|
||||
# action="store", dest="obi:inputview2",
|
||||
# metavar='<INPUT VIEW NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="Eventually, the name of the second input view.")
|
||||
#
|
||||
# group.add_argument('--input-column-1', '-c',
|
||||
# action="store", dest="obi:inputcolumn1",
|
||||
# metavar='<INPUT COLUMN NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="Name of the (first) input column. "
|
||||
# " Default: the default nucleotide sequence column of the view if there is one.")
|
||||
#
|
||||
# group.add_argument('--input-column-2', '-C',
|
||||
# action="store", dest="obi:inputcolumn2",
|
||||
# metavar='<INPUT COLUMN NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="Eventually, the name of the second input column.")
|
||||
#
|
||||
# group.add_argument('--input-elt-1', '-e',
|
||||
# action="store", dest="obi:inputelement1",
|
||||
# metavar='<INPUT ELEMENT NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="If the first input column has multiple elements per line, name of the element referring to the sequence to align. "
|
||||
# " Default: the first element of the line.")
|
||||
#
|
||||
# group.add_argument('--input-elt-2', '-E',
|
||||
# action="store", dest="obi:inputelement2",
|
||||
# metavar='<INPUT ELEMENT NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="If the second input column has multiple elements per line, name of the element referring to the sequence to align. "
|
||||
# " Default: the first element of the line.")
|
||||
#
|
||||
# group.add_argument('--id-column-1', '-f',
|
||||
# action="store", dest="obi:idcolumn1",
|
||||
# metavar='<ID COLUMN NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="Name of the (first) column containing the identifiers of the sequences to align. "
|
||||
# " Default: the default ID column of the view if there is one.")
|
||||
#
|
||||
# group.add_argument('--id-column-2', '-F',
|
||||
# action="store", dest="obi:idcolumn2",
|
||||
# metavar='<ID COLUMN NAME>',
|
||||
# default="",
|
||||
# type=str,
|
||||
# help="Eventually, the name of the second ID column.")
|
||||
#
|
||||
# group.add_argument('--output-view', '-o',
|
||||
# action="store", dest="obi:outputview",
|
||||
# metavar='<OUTPUT VIEW NAME>',
|
||||
# default=None,
|
||||
# type=str,
|
||||
# help="Name of the output view.")
|
||||
#
|
||||
#
|
||||
# group=parser.add_argument_group('obi lcs specific options')
|
||||
#
|
||||
# group.add_argument('--threshold','-t',
|
||||
# action="store", dest="align:threshold",
|
||||
# metavar='<THRESHOLD>',
|
||||
# default=0.0,
|
||||
# type=float,
|
||||
# help="Score threshold. If the score is normalized and expressed in similarity (default),"
|
||||
# " it is an identity, e.g. 0.95 for an identity of 95%%. If the score is normalized"
|
||||
# " and expressed in distance, it is (1.0 - identity), e.g. 0.05 for an identity of 95%%."
|
||||
# " If the score is not normalized and expressed in similarity, it is the length of the"
|
||||
# " Longest Common Subsequence. If the score is not normalized and expressed in distance,"
|
||||
# " it is (reference length - LCS length)."
|
||||
# " Only sequence pairs with a similarity above <THRESHOLD> are printed. Default: 0.00"
|
||||
# " (no threshold).")
|
||||
#
|
||||
# group.add_argument('--longest-length','-L',
|
||||
# action="store_const", dest="align:reflength",
|
||||
# default=0,
|
||||
# const=1,
|
||||
# help="The reference length is the length of the longest sequence."
|
||||
# " Default: the reference length is the length of the alignment.")
|
||||
#
|
||||
# group.add_argument('--shortest-length','-l',
|
||||
# action="store_const", dest="align:reflength",
|
||||
# default=0,
|
||||
# const=2,
|
||||
# help="The reference length is the length of the shortest sequence."
|
||||
# " Default: the reference length is the length of the alignment.")
|
||||
#
|
||||
# group.add_argument('--raw','-r',
|
||||
# action="store_false", dest="align:normalize",
|
||||
# default=True,
|
||||
# help="Raw score, not normalized. Default: score is normalized with the reference sequence length.")
|
||||
#
|
||||
# group.add_argument('--distance','-D',
|
||||
# action="store_false", dest="align:similarity",
|
||||
# default=True,
|
||||
# help="Score is expressed in distance. Default: score is expressed in similarity.")
|
||||
#
|
||||
# group.add_argument('--print-seq','-s',
|
||||
# action="store_true", dest="align:printseq",
|
||||
# default=False,
|
||||
# help="The nucleotide sequences are written in the output view. Default: they are not written.")
|
||||
#
|
||||
# group.add_argument('--print-count','-n',
|
||||
# action="store_true", dest="align:printcount",
|
||||
# default=False,
|
||||
# help="Sequence counts are written in the output view. Default: they are not written.")
|
||||
#
|
||||
# group.add_argument('--thread-count','-p', # TODO should probably be in a specific option group
|
||||
# action="store", dest="align:threadcount",
|
||||
# metavar='<THREAD COUNT>',
|
||||
# default=1,
|
||||
# type=int,
|
||||
# help="Number of threads to use for the computation. Default: one.")
|
||||
#
|
||||
#
|
||||
# # cpdef align(str dms_n,
|
||||
# # str input_view_1_n, str output_view_n,
|
||||
# # str input_view_2_n="",
|
||||
# # str input_column_1_n="", str input_column_2_n="",
|
||||
# # str input_elt_1_n="", str input_elt_2_n="",
|
||||
# # str id_column_1_n="", str id_column_2_n="",
|
||||
# # double threshold=0.0, bint normalize=True,
|
||||
# # int reference=0, bint similarity_mode=True,
|
||||
# # bint print_seq=False, bint print_count=False,
|
||||
# # comments="",
|
||||
# # int thread_count=1) :
|
||||
# #
|
||||
# # cdef OBIDMS d
|
||||
# # d = OBIDMS(dms_n)
|
||||
# #
|
||||
# # if input_view_2_n == "" and input_column_2_n == "" :
|
||||
# # if obi_lcs_align_one_column(d._pointer, \
|
||||
# # str2bytes(input_view_1_n), \
|
||||
# # str2bytes(input_column_1_n), \
|
||||
# # str2bytes(input_elt_1_n), \
|
||||
# # str2bytes(id_column_1_n), \
|
||||
# # str2bytes(output_view_n), \
|
||||
# # str2bytes(comments), \
|
||||
# # print_seq, \
|
||||
# # print_count, \
|
||||
# # threshold, normalize, reference, similarity_mode,
|
||||
# # thread_count) < 0 :
|
||||
# # raise Exception("Error aligning sequences")
|
||||
# # else :
|
||||
# # if obi_lcs_align_two_columns(d._pointer, \
|
||||
# # str2bytes(input_view_1_n), \
|
||||
# # str2bytes(input_view_2_n), \
|
||||
# # str2bytes(input_column_1_n), \
|
||||
# # str2bytes(input_column_2_n), \
|
||||
# # str2bytes(input_elt_1_n), \
|
||||
# # str2bytes(input_elt_2_n), \
|
||||
# # str2bytes(id_column_1_n), \
|
||||
# # str2bytes(id_column_2_n), \
|
||||
# # str2bytes(output_view_n), \
|
||||
# # str2bytes(comments), \
|
||||
# # print_seq, \
|
||||
# # print_count, \
|
||||
# # threshold, normalize, reference, similarity_mode) < 0 :
|
||||
# # raise Exception("Error aligning sequences")
|
||||
# #
|
||||
# # d.close()
|
||||
# #
|
||||
# #
|
||||
def run(config):
|
||||
pass
|
||||
# TODO: Build formatted comments with all parameters etc
|
||||
# comments = "Obi align"
|
||||
#
|
||||
# # Call cython alignment function
|
||||
# align(config['obi']['defaultdms'], \
|
||||
# config['obi']['inputview1'], \
|
||||
# config['obi']['outputview'], \
|
||||
# input_view_2_n = config['obi']['inputview2'], \
|
||||
# input_column_1_n = config['obi']['inputcolumn1'], \
|
||||
# input_column_2_n = config['obi']['inputcolumn2'], \
|
||||
# input_elt_1_n = config['obi']['inputelement1'], \
|
||||
# input_elt_2_n = config['obi']['inputelement2'], \
|
||||
# id_column_1_n = config['obi']['idcolumn1'], \
|
||||
# id_column_2_n = config['obi']['idcolumn2'], \
|
||||
# threshold = config['align']['threshold'], \
|
||||
# normalize = config['align']['normalize'], \
|
||||
# reference = config['align']['reflength'], \
|
||||
# similarity_mode = config['align']['similarity'], \
|
||||
# print_seq = config['align']['printseq'], \
|
||||
# print_count = config['align']['printcount'], \
|
||||
# comments = comments, \
|
||||
# thread_count = config['align']['threadcount'])
|
||||
#
|
||||
# print("Done.")
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
# #
|
@ -1,57 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.dms.dms import DMS # TODO cimport doesn't work
|
||||
from obitools3.dms.view.view import View # TODO cimport doesn't work
|
||||
|
||||
|
||||
# TODO with URIs
|
||||
|
||||
__title__="Less equivalent"
|
||||
|
||||
default_config = { 'inputview' : None,
|
||||
}
|
||||
|
||||
def addOptions(parser):
|
||||
|
||||
# TODO put this common group somewhere else but I don't know where
|
||||
group=parser.add_argument_group('DMS and view options')
|
||||
|
||||
group.add_argument('--default-dms','-d',
|
||||
action="store", dest="obi:defaultdms",
|
||||
metavar='<DMS NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the default DMS for reading and writing data.")
|
||||
|
||||
group.add_argument('--view','-v',
|
||||
action="store", dest="obi:view",
|
||||
metavar='<VIEW NAME>',
|
||||
default=None,
|
||||
type=str,
|
||||
help="Name of the view to print.")
|
||||
|
||||
|
||||
group=parser.add_argument_group('obi less specific options')
|
||||
|
||||
group.add_argument('--print', '-n',
|
||||
action="store", dest="less:print",
|
||||
metavar='<N>',
|
||||
default=10,
|
||||
type=int,
|
||||
help="Print N sequences (default: 10)")
|
||||
|
||||
|
||||
def run(config):
|
||||
|
||||
# Open DMS
|
||||
d = DMS.open(config['obi']['defaultdms'])
|
||||
|
||||
# Open input view
|
||||
iview = View.open(d, config['obi']['inputview'])
|
||||
|
||||
# Print
|
||||
for i in range(config['less']['print']) :
|
||||
print(repr(iview[i]))
|
||||
|
||||
d.close()
|
||||
|
@ -1,437 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.apps.progress cimport ProgressBar # TODO I absolutely don't understand why it doesn't work without that line
|
||||
from obitools3.dms.view.view import View, Line_selection
|
||||
from obitools3.dms.view.typed_view.view_NUC_SEQS import View_NUC_SEQS
|
||||
from obitools3.dms.dms import DMS
|
||||
from obitools3.dms.column import Column
|
||||
from obitools3.dms.taxo.taxo import OBI_Taxonomy
|
||||
from obitools3.utils cimport str2bytes
|
||||
from obitools3.dms.capi.obitypes cimport OBI_INT, \
|
||||
OBI_FLOAT, \
|
||||
OBI_BOOL, \
|
||||
OBI_CHAR, \
|
||||
OBI_STR, \
|
||||
OBI_SEQ
|
||||
import shutil
|
||||
import string
|
||||
import random
|
||||
|
||||
|
||||
VIEW_TYPES = ["", "NUC_SEQS_VIEW"]
|
||||
COL_TYPES = [OBI_INT, OBI_FLOAT, OBI_BOOL, OBI_CHAR, OBI_STR, OBI_SEQ]
|
||||
NUC_SEQUENCE_COLUMN = "NUC_SEQ"
|
||||
ID_COLUMN = "ID"
|
||||
DEFINITION_COLUMN = "DEFINITION"
|
||||
QUALITY_COLUMN = "QUALITY"
|
||||
SPECIAL_COLUMNS = [NUC_SEQUENCE_COLUMN, ID_COLUMN, DEFINITION_COLUMN, QUALITY_COLUMN]
|
||||
|
||||
#TAXDUMP = "" TODO path=?
|
||||
TAXTEST = "taxtest"
|
||||
|
||||
NAME_MAX_LEN = 200
|
||||
COL_COMMENTS_MAX_LEN = 2048
|
||||
MAX_INT = 2147483647 # used to generate random float values
|
||||
|
||||
|
||||
__title__="Tests if the obitools are working properly"
|
||||
|
||||
|
||||
default_config = {
|
||||
}
|
||||
|
||||
|
||||
def test_taxo(config, infos):
|
||||
tax1 = OBI_Taxonomy.open(infos['dms'], config['obi']['taxo'], taxdump=True)
|
||||
tax1.write(TAXTEST)
|
||||
tax2 = OBI_Taxonomy.open(infos['dms'], TAXTEST, taxdump=False)
|
||||
assert len(tax1) == len(tax2), "Length of written taxonomy != length of read taxdump : "+str(len(tax2))+" != "+str(len(tax1))
|
||||
|
||||
i = 0
|
||||
for x in range(config['test']['nbtests']):
|
||||
idx = random.randint(0, len(tax1)-1)
|
||||
t1 = tax1.get_taxon_by_idx(idx)
|
||||
t2 = tax2.get_taxon_by_idx(idx)
|
||||
assert t1 == t2, "Taxon gotten from written taxonomy != taxon read from taxdump : "+str(t2)+" != "+str(t1)
|
||||
i+=1
|
||||
if (i%(config['test']['nbtests']/10)) == 0 :
|
||||
print("Testing taxonomy functions......"+str(i*100/config['test']['nbtests'])+"%")
|
||||
|
||||
tax1.close()
|
||||
tax2.close()
|
||||
|
||||
|
||||
def random_length(max_len):
|
||||
return random.randint(1, max_len)
|
||||
|
||||
|
||||
def random_bool(config):
|
||||
return random.choice([True, False])
|
||||
|
||||
|
||||
def random_char(config):
|
||||
return str2bytes(random.choice(string.ascii_lowercase))
|
||||
|
||||
|
||||
def random_float(config):
|
||||
return random.randint(0, MAX_INT) + random.random()
|
||||
|
||||
|
||||
def random_int(config):
|
||||
return random.randint(0, config['test']['maxlinenb'])
|
||||
|
||||
|
||||
def random_seq(config):
|
||||
return str2bytes(''.join(random.choice(['a','t','g','c']) for i in range(random_length(config['test']['seqmaxlen']))))
|
||||
|
||||
|
||||
def random_bytes(config):
|
||||
return random_bytes_with_max_len(config['test']['strmaxlen'])
|
||||
|
||||
|
||||
def random_str_with_max_len(max_len):
|
||||
return ''.join(random.choice(string.ascii_lowercase) for i in range(random_length(max_len)))
|
||||
|
||||
|
||||
def random_bytes_with_max_len(max_len):
|
||||
return str2bytes(''.join(random.choice(string.ascii_lowercase) for i in range(random_length(max_len))))
|
||||
|
||||
|
||||
def random_column(infos):
|
||||
return random.choice(sorted(list(infos['view'].keys())))
|
||||
|
||||
|
||||
def random_unique_name(infos):
|
||||
name = ""
|
||||
while name == "" or name in infos['unique_names'] :
|
||||
name = random_str_with_max_len(NAME_MAX_LEN)
|
||||
infos['unique_names'].append(name)
|
||||
return name
|
||||
|
||||
|
||||
def random_unique_element_name(config, infos):
|
||||
name = ""
|
||||
while name == "" or name in infos['unique_names'] :
|
||||
name = random_str_with_max_len(config['test']['elt_name_max_len'])
|
||||
infos['unique_names'].append(name)
|
||||
return name
|
||||
|
||||
|
||||
def print_test(config, sentence):
|
||||
if config['test']['verbose'] :
|
||||
print(sentence)
|
||||
|
||||
|
||||
def test_set_and_get(config, infos):
|
||||
print_test(config, ">>> Set and get test")
|
||||
col_name = random_column(infos)
|
||||
col = infos['view'][col_name]
|
||||
element_names = col.elements_names
|
||||
data_type = col.data_type
|
||||
if data_type == "OBI_QUAL" :
|
||||
print_test(config, "-")
|
||||
return
|
||||
idx = random_int(config)
|
||||
value = random.choice([None, infos['random_generator'][data_type](config)])
|
||||
if col.nb_elements_per_line > 1 :
|
||||
elt = random.choice(element_names)
|
||||
col[idx][elt] = value
|
||||
assert col[idx][elt] == value, "Column: "+repr(col)+"\nSet value != gotten value "+str(value)+" != "+str(col[idx][elt])
|
||||
else:
|
||||
col[idx] = value
|
||||
assert col[idx] == value, "Column: "+repr(col)+"\nSet value != gotten value "+str(value)+" != "+str(col[idx])
|
||||
|
||||
print_test(config, ">>> Set and get test OK")
|
||||
|
||||
|
||||
def test_add_col(config, infos):
|
||||
print_test(config, ">>> Add column test")
|
||||
#existing_col = random_bool(config) # TODO doesn't work because of line count problem. See obiview.c line 1737
|
||||
#if existing_col and infos["view_names"] != [] :
|
||||
# random_view = infos['dms'].open_view(random.choice(infos["view_names"]))
|
||||
# random_column = random_view[random.choice(sorted(list(random_view.columns))]
|
||||
# random_column_refs = random_column.refs
|
||||
# if random_column_refs['name'] in infos['view'] :
|
||||
# alias = random_unique_name(infos)
|
||||
# else :
|
||||
# alias = ''
|
||||
# infos['view'].add_column(random_column_refs['name'], version_number=random_column_refs['version'], alias=alias, create=False)
|
||||
# random_view.close()
|
||||
#else :
|
||||
create_random_column(config, infos)
|
||||
print_test(config, ">>> Add column test OK")
|
||||
|
||||
|
||||
def test_delete_col(config, infos):
|
||||
print_test(config, ">>> Delete column test")
|
||||
if len(list(infos['view'].keys())) <= 1 :
|
||||
print_test(config, "-")
|
||||
return
|
||||
col_name = random_column(infos)
|
||||
if col_name in SPECIAL_COLUMNS :
|
||||
print_test(config, "-")
|
||||
return
|
||||
infos['view'].delete_column(col_name)
|
||||
print_test(config, ">>> Delete column test OK")
|
||||
|
||||
|
||||
def test_col_alias(config, infos):
|
||||
print_test(config, ">>> Changing column alias test")
|
||||
col_name = random_column(infos)
|
||||
if col_name in SPECIAL_COLUMNS :
|
||||
print_test(config, "-")
|
||||
return
|
||||
infos['view'][col_name].name = random_unique_name(infos)
|
||||
print_test(config, ">>> Changing column alias test OK")
|
||||
|
||||
|
||||
def test_new_view(config, infos):
|
||||
print_test(config, ">>> New view test")
|
||||
random_new_view(config, infos)
|
||||
print_test(config, ">>> New view test OK")
|
||||
|
||||
|
||||
def random_test(config, infos):
|
||||
return random.choice(infos['tests'])(config, infos)
|
||||
|
||||
|
||||
def random_view_type():
|
||||
return random.choice(VIEW_TYPES)
|
||||
|
||||
|
||||
def random_col_type():
|
||||
return random.choice(COL_TYPES)
|
||||
|
||||
|
||||
def fill_column(config, infos, col) :
|
||||
data_type = col.data_type
|
||||
element_names = col.elements_names
|
||||
|
||||
if len(element_names) > 1 :
|
||||
for i in range(random_int(config)) :
|
||||
for j in range(len(element_names)) :
|
||||
col[i][element_names[j]] = random.choice([None, infos['random_generator'][data_type](config)])
|
||||
else :
|
||||
for i in range(random_int(config)) :
|
||||
col[i] = random.choice([None, infos['random_generator'][data_type](config)])
|
||||
|
||||
|
||||
def create_random_column(config, infos) :
|
||||
alias = random.choice(['', random_unique_name(infos)])
|
||||
nb_elements_per_line=random.randint(1, config['test']['maxelts'])
|
||||
elements_names = []
|
||||
for i in range(nb_elements_per_line) :
|
||||
elements_names.append(random_unique_element_name(config, infos))
|
||||
elements_names = random.choice([None, elements_names])
|
||||
name = random_unique_name(infos)
|
||||
data_type = random_col_type()
|
||||
|
||||
column = Column.new_column(infos['view'],
|
||||
name,
|
||||
data_type,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=random_str_with_max_len(COL_COMMENTS_MAX_LEN),
|
||||
alias=alias
|
||||
)
|
||||
|
||||
if alias != '' :
|
||||
assert infos['view'][alias] == column
|
||||
else :
|
||||
assert infos['view'][name] == column
|
||||
|
||||
return column
|
||||
|
||||
|
||||
def fill_view(config, infos):
|
||||
for i in range(random.randint(1, config['test']['maxinicolcount'])) :
|
||||
col = create_random_column(config, infos)
|
||||
fill_column(config, infos, col)
|
||||
|
||||
|
||||
def random_new_view(config, infos, first=False):
|
||||
v_to_clone = None
|
||||
line_selection = None
|
||||
quality_col = False # TODO
|
||||
if not first:
|
||||
infos['view_names'].append(infos['view'].name)
|
||||
infos['view'].close()
|
||||
v_to_clone = View.open(infos['dms'], random.choice(infos["view_names"]))
|
||||
v_type = ""
|
||||
print_test(config, "View to clone: ")
|
||||
print_test(config, repr(v_to_clone))
|
||||
create_line_selection = random_bool(config)
|
||||
if create_line_selection and v_to_clone.line_count > 0:
|
||||
print_test(config, "New view with new line selection.")
|
||||
line_selection = Line_selection(v_to_clone)
|
||||
for i in range(random.randint(1, v_to_clone.line_count)) :
|
||||
line_selection.append(random.randint(0, v_to_clone.line_count-1))
|
||||
#print_test(config, "New line selection: "+str(line_selection))
|
||||
else :
|
||||
v_type = random_view_type()
|
||||
|
||||
if line_selection is not None :
|
||||
infos['view'] = line_selection.materialize(random_unique_name(infos), comments=random_str_with_max_len(config['test']['commentsmaxlen']))
|
||||
elif v_to_clone is not None :
|
||||
infos['view'] = v_to_clone.clone(random_unique_name(infos), comments=random_str_with_max_len(config['test']['commentsmaxlen']))
|
||||
else :
|
||||
if v_type == "NUC_SEQS_VIEW" :
|
||||
infos['view'] = View_NUC_SEQS.new(infos['dms'], random_unique_name(infos), comments=random_str_with_max_len(config['test']['commentsmaxlen'])) # TODO quality column
|
||||
else :
|
||||
infos['view'] = View.new(infos['dms'], random_unique_name(infos), comments=random_str_with_max_len(config['test']['commentsmaxlen'])) # TODO quality column
|
||||
|
||||
print_test(config, repr(infos['view']))
|
||||
if v_to_clone is not None :
|
||||
if line_selection is None:
|
||||
assert v_to_clone.line_count == infos['view'].line_count, "New view and cloned view don't have the same line count : "+str(v_to_clone.line_count)+" (view to clone line count) != "+str(infos['view'].line_count)+" (new view line count)"
|
||||
else :
|
||||
assert len(line_selection) == infos['view'].line_count, "New view with new line selection does not have the right line count : "+str(len(line_selection))+" (line selection length) != "+str(infos['view'].line_count)+" (new view line count)"
|
||||
v_to_clone.close()
|
||||
if first :
|
||||
fill_view(config, infos)
|
||||
|
||||
|
||||
def create_test_obidms(config, infos):
|
||||
infos['dms'] = DMS.new(config['obi']['defaultdms'])
|
||||
|
||||
|
||||
def ini_dms_and_first_view(config, infos):
|
||||
create_test_obidms(config, infos)
|
||||
random_new_view(config, infos, first=True)
|
||||
infos['view_names'] = []
|
||||
|
||||
|
||||
def addOptions(parser):
|
||||
|
||||
# TODO put this common group somewhere else but I don't know where
|
||||
group=parser.add_argument_group('DMS and view options')
|
||||
|
||||
group.add_argument('--default-dms','-d',
|
||||
action="store", dest="obi:defaultdms",
|
||||
metavar='<DMS NAME>',
|
||||
default="/tmp/test_dms",
|
||||
type=str,
|
||||
help="Name of the default DMS for reading and writing data. "
|
||||
"Default: /tmp/test_dms")
|
||||
|
||||
group.add_argument('--taxo','-t', # TODO I don't understand why the option is not registered if it is not set
|
||||
action="store", dest="obi:taxo",
|
||||
metavar='<TAXDUMP PATH>',
|
||||
default='', # TODO not None because if it's None, the option is not entered in the option dictionary.
|
||||
type=str,
|
||||
help="Path to a taxdump to test the taxonomy.")
|
||||
|
||||
|
||||
group=parser.add_argument_group('obi test specific options')
|
||||
|
||||
group.add_argument('--nb_tests','-n',
|
||||
action="store", dest="test:nbtests",
|
||||
metavar='<NB_TESTS>',
|
||||
default=1000,
|
||||
type=int,
|
||||
help="Number of tests to carry out. "
|
||||
"Default: 1000")
|
||||
|
||||
group.add_argument('--seq_max_len','-s',
|
||||
action="store", dest="test:seqmaxlen",
|
||||
metavar='<SEQ_MAX_LEN>',
|
||||
default=200,
|
||||
type=int,
|
||||
help="Maximum length of DNA sequences. "
|
||||
"Default: 200")
|
||||
|
||||
group.add_argument('--str_max_len','-r',
|
||||
action="store", dest="test:strmaxlen",
|
||||
metavar='<STR_MAX_LEN>',
|
||||
default=200,
|
||||
type=int,
|
||||
help="Maximum length of character strings. "
|
||||
"Default: 200")
|
||||
|
||||
group.add_argument('--comments_max_len','-c',
|
||||
action="store", dest="test:commentsmaxlen",
|
||||
metavar='<COMMENTS_MAX_LEN>',
|
||||
default=10000,
|
||||
type=int,
|
||||
help="Maximum length of view comments. "
|
||||
"Default: 10000")
|
||||
|
||||
group.add_argument('--max_ini_col_count','-o',
|
||||
action="store", dest="test:maxinicolcount",
|
||||
metavar='<MAX_INI_COL_COUNT>',
|
||||
default=10,
|
||||
type=int,
|
||||
help="Maximum number of columns in the initial view. "
|
||||
"Default: 10")
|
||||
|
||||
group.add_argument('--max_line_nb','-l',
|
||||
action="store", dest="test:maxlinenb",
|
||||
metavar='<MAX_LINE_NB>',
|
||||
default=10000,
|
||||
type=int,
|
||||
help="Maximum number of lines in a column. "
|
||||
"Default: 10000")
|
||||
|
||||
group.add_argument('--max_elts_per_line','-e',
|
||||
action="store", dest="test:maxelts",
|
||||
metavar='<MAX_ELTS_PER_LINE>',
|
||||
default=20,
|
||||
type=int,
|
||||
help="Maximum number of elements per line in a column. "
|
||||
"Default: 20")
|
||||
|
||||
group.add_argument('--verbose','-v',
|
||||
action="store_true", dest="test:verbose",
|
||||
default=False,
|
||||
help="Print the tests. "
|
||||
"Default: Don't print the tests")
|
||||
|
||||
group.add_argument('--seed','-g',
|
||||
action="store", dest="test:seed",
|
||||
metavar='<SEED>',
|
||||
default=None,
|
||||
help="Seed (use for reproducible tests). "
|
||||
"Default: Seed is determined by Python")
|
||||
|
||||
def run(config):
|
||||
|
||||
if 'seed' in config['test'] :
|
||||
random.seed(config['test']['seed'])
|
||||
|
||||
infos = {'dms': None,
|
||||
'view': None,
|
||||
'view_names': None,
|
||||
'unique_names': [],
|
||||
'random_generator': {b"OBI_BOOL": random_bool, b"OBI_CHAR": random_char, b"OBI_FLOAT": random_float, b"OBI_INT": random_int, b"OBI_SEQ": random_seq, b"OBI_STR": random_bytes},
|
||||
'tests': [test_set_and_get, test_add_col, test_delete_col, test_col_alias, test_new_view]
|
||||
}
|
||||
|
||||
config['test']['elt_name_max_len'] = int((COL_COMMENTS_MAX_LEN - config['test']['maxelts']) / config['test']['maxelts'])
|
||||
|
||||
print("Initializing the DMS and the first view...")
|
||||
|
||||
shutil.rmtree(config['obi']['defaultdms']+'.obidms', ignore_errors=True)
|
||||
|
||||
ini_dms_and_first_view(config, infos)
|
||||
print_test(config, repr(infos['view']))
|
||||
|
||||
i = 0
|
||||
for t in range(config['test']['nbtests']):
|
||||
random_test(config, infos)
|
||||
print_test(config, repr(infos['view']))
|
||||
i+=1
|
||||
if (i%(config['test']['nbtests']/10)) == 0 :
|
||||
print("Testing......"+str(i*100/config['test']['nbtests'])+"%")
|
||||
|
||||
#print(infos)
|
||||
|
||||
if config['obi']['taxo'] != '' :
|
||||
test_taxo(config, infos)
|
||||
|
||||
infos['view'].close()
|
||||
infos['dms'].close()
|
||||
shutil.rmtree(config['obi']['defaultdms']+'.obidms', ignore_errors=True)
|
||||
|
||||
print("Done.")
|
||||
|
||||
|
@ -1,2 +0,0 @@
|
||||
from .dms import DMS # @UnresolvedImport
|
||||
|
@ -1,41 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.dms.capi.obidms cimport OBIDMS_p
|
||||
from obitools3.dms.capi.obitypes cimport const_char_p
|
||||
|
||||
|
||||
cdef extern from "obi_align.h" nogil:
|
||||
|
||||
int obi_lcs_align_one_column(OBIDMS_p dms,
|
||||
const_char_p seq_view_name,
|
||||
const_char_p seq_column_name,
|
||||
const_char_p seq_elt_name,
|
||||
const_char_p id_column_name,
|
||||
const_char_p output_view_name,
|
||||
const_char_p output_view_comments,
|
||||
bint print_seq,
|
||||
bint print_count,
|
||||
double threshold,
|
||||
bint normalize,
|
||||
int reference,
|
||||
bint similarity_mode,
|
||||
int thread_count)
|
||||
|
||||
|
||||
int obi_lcs_align_two_columns(OBIDMS_p dms,
|
||||
const_char_p seq1_view_name,
|
||||
const_char_p seq2_view_name,
|
||||
const_char_p seq1_column_name,
|
||||
const_char_p seq2_column_name,
|
||||
const_char_p seq1_elt_name,
|
||||
const_char_p seq2_elt_name,
|
||||
const_char_p id1_column_name,
|
||||
const_char_p id2_column_name,
|
||||
const_char_p output_view_name,
|
||||
const_char_p output_view_comments,
|
||||
bint print_seq,
|
||||
bint print_count,
|
||||
double threshold,
|
||||
bint normalize,
|
||||
int reference,
|
||||
bint similarity_mode)
|
@ -1,19 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .obitypes cimport const_char_p
|
||||
|
||||
cdef extern from "obidms.h" nogil:
|
||||
struct OBIDMS_t:
|
||||
const_char_p dms_name
|
||||
|
||||
ctypedef OBIDMS_t* OBIDMS_p
|
||||
|
||||
OBIDMS_p obi_dms(const_char_p dms_name)
|
||||
OBIDMS_p obi_open_dms(const_char_p dms_path)
|
||||
OBIDMS_p obi_test_open_dms(const_char_p dms_path)
|
||||
OBIDMS_p obi_create_dms(const_char_p dms_path)
|
||||
int obi_close_dms(OBIDMS_p dms)
|
||||
char* obi_dms_get_dms_path(OBIDMS_p dms)
|
||||
char* obi_dms_get_full_path(OBIDMS_p dms, const_char_p path_name)
|
||||
|
||||
|
@ -1,62 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from ..capi.obidms cimport OBIDMS_p
|
||||
from ..capi.obitypes cimport const_char_p, \
|
||||
OBIType_t, \
|
||||
obiversion_t, \
|
||||
obiint_t, \
|
||||
obibool_t, \
|
||||
obichar_t, \
|
||||
obifloat_t, \
|
||||
index_t, \
|
||||
time_t
|
||||
|
||||
from libc.stdint cimport uint8_t
|
||||
|
||||
|
||||
cdef extern from "obidmscolumn.h" nogil:
|
||||
|
||||
struct Column_reference_t :
|
||||
const_char_p column_name
|
||||
obiversion_t version
|
||||
|
||||
ctypedef Column_reference_t* Column_reference_p
|
||||
|
||||
struct OBIDMS_column_header_t:
|
||||
size_t header_size
|
||||
size_t data_size
|
||||
index_t line_count
|
||||
index_t lines_used
|
||||
index_t nb_elements_per_line
|
||||
const_char_p elements_names
|
||||
OBIType_t returned_data_type
|
||||
OBIType_t stored_data_type
|
||||
time_t creation_date
|
||||
obiversion_t version
|
||||
obiversion_t cloned_from
|
||||
const_char_p name
|
||||
const_char_p indexer_name
|
||||
Column_reference_t associated_column
|
||||
const_char_p comments
|
||||
|
||||
ctypedef OBIDMS_column_header_t* OBIDMS_column_header_p
|
||||
|
||||
struct OBIDMS_column_t:
|
||||
OBIDMS_p dms
|
||||
OBIDMS_column_header_p header
|
||||
bint writable
|
||||
|
||||
ctypedef OBIDMS_column_t* OBIDMS_column_p
|
||||
|
||||
int obi_close_column(OBIDMS_column_p column)
|
||||
|
||||
obiversion_t obi_column_get_latest_version_from_name(OBIDMS_p dms,
|
||||
const_char_p column_name)
|
||||
|
||||
OBIDMS_column_header_p obi_column_get_header_from_name(OBIDMS_p dms,
|
||||
const_char_p column_name,
|
||||
obiversion_t version_number)
|
||||
|
||||
int obi_close_header(OBIDMS_column_header_p header)
|
||||
|
||||
char* obi_get_elements_names(OBIDMS_column_p column)
|
@ -1,8 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
cdef extern from "obierrno.h":
|
||||
int obi_errno
|
||||
|
||||
extern int OBI_LINE_IDX_ERROR
|
||||
extern int OBI_ELT_IDX_ERROR
|
@ -1 +0,0 @@
|
||||
from .column import Column # @UnresolvedImport
|
@ -1,52 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..capi.obitypes cimport index_t, \
|
||||
obitype_t
|
||||
|
||||
from ..capi.obidmscolumn cimport OBIDMS_column_p
|
||||
|
||||
from ..view.view cimport View
|
||||
|
||||
from ..object cimport OBIWrapper
|
||||
|
||||
|
||||
cdef dict __OBIDMS_COLUMN_CLASS__
|
||||
|
||||
|
||||
cdef class Column(OBIWrapper) :
|
||||
|
||||
cdef View _view
|
||||
cdef bytes _alias
|
||||
|
||||
cdef inline OBIDMS_column_p pointer(self)
|
||||
cpdef close(self)
|
||||
|
||||
@staticmethod
|
||||
cdef type get_column_class(obitype_t obitype, bint multi_elts)
|
||||
|
||||
@staticmethod
|
||||
cdef type get_python_type(obitype_t obitype, bint multi_elts)
|
||||
|
||||
|
||||
cdef class Column_multi_elts(Column) :
|
||||
|
||||
# The type of [values] can be dict, Column_line, or any other class with values referenced by keys with an iterator [for key in values]
|
||||
cpdef set_line(self, index_t line_nb, object values)
|
||||
|
||||
|
||||
cdef class Column_line:
|
||||
|
||||
cdef Column _column
|
||||
cdef index_t _index
|
||||
|
||||
cpdef update(self, data)
|
||||
|
||||
|
||||
cdef register_column_class(obitype_t obitype,
|
||||
bint multi_elts,
|
||||
type obiclass,
|
||||
type python)
|
||||
|
||||
cdef register_all_column_classes()
|
||||
|
@ -1,366 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.dms.column import typed_column
|
||||
|
||||
|
||||
__OBIDMS_COLUMN_CLASS__ = {}
|
||||
|
||||
|
||||
from ..capi.obitypes cimport name_data_type, \
|
||||
obitype_t, \
|
||||
OBI_BOOL
|
||||
|
||||
from ..capi.obidmscolumn cimport OBIDMS_column_header_p, \
|
||||
obi_close_column, \
|
||||
obi_get_elements_names
|
||||
|
||||
from ..capi.obiutils cimport obi_format_date
|
||||
|
||||
from ..capi.obiview cimport obi_view_add_column, \
|
||||
obi_view_get_pointer_on_column_in_view, \
|
||||
Obiview_p
|
||||
|
||||
from ..object cimport OBIObjectClosedInstance
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
bytes2str, \
|
||||
str2bytes
|
||||
|
||||
from obitools3.dms.column import typed_column
|
||||
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
|
||||
cdef class Column(OBIWrapper) :
|
||||
'''
|
||||
The obitools3.dms.column.Column class wraps a C instance of a column in the context of a View
|
||||
'''
|
||||
|
||||
cdef inline OBIDMS_column_p pointer(self) :
|
||||
return <OBIDMS_column_p>(<OBIDMS_column_p*>(self._pointer))[0]
|
||||
|
||||
|
||||
@staticmethod
|
||||
cdef type get_column_class(obitype_t obitype, bint multi_elts):
|
||||
'''
|
||||
Internal function returning the python class representing
|
||||
a column for a given obitype.
|
||||
'''
|
||||
return __OBIDMS_COLUMN_CLASS__[(obitype, multi_elts)][0]
|
||||
|
||||
|
||||
@staticmethod
|
||||
cdef type get_python_type(obitype_t obitype, bint multi_elts): # TODO
|
||||
'''
|
||||
Internal function returning the python type representing
|
||||
an instance for a given obitype.
|
||||
'''
|
||||
return __OBIDMS_COLUMN_CLASS__[(obitype, multi_elts)][1]
|
||||
|
||||
|
||||
@staticmethod
|
||||
def new_column(View view,
|
||||
object column_name,
|
||||
obitype_t data_type,
|
||||
index_t nb_elements_per_line=1,
|
||||
list elements_names=None,
|
||||
object comments=b"",
|
||||
object alias=b""):
|
||||
# TODO indexer_name?
|
||||
|
||||
cdef bytes column_name_b = tobytes(column_name)
|
||||
cdef bytes alias_b = tobytes(alias)
|
||||
cdef bytes comments_b = tobytes(comments)
|
||||
cdef bytes elements_names_b
|
||||
cdef char* elements_names_p
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
if alias_b == b"" :
|
||||
alias_b = column_name_b
|
||||
|
||||
if elements_names is not None:
|
||||
elements_names_b = b';'.join([tobytes(x) for x in elements_names])
|
||||
elements_names_p = elements_names_b
|
||||
else:
|
||||
elements_names_p = NULL
|
||||
|
||||
if (obi_view_add_column(view = view.pointer(),
|
||||
column_name = column_name_b,
|
||||
version_number = -1,
|
||||
alias = alias_b,
|
||||
data_type = <obitype_t>data_type,
|
||||
nb_lines = len(view),
|
||||
nb_elements_per_line = nb_elements_per_line,
|
||||
elements_names = elements_names_p,
|
||||
indexer_name = NULL,
|
||||
associated_column_name = NULL,
|
||||
associated_column_version = -1,
|
||||
comments = comments_b,
|
||||
create = True)<0):
|
||||
raise RuntimeError("Cannot create column %s in view %s" % (bytes2str(column_name_b),
|
||||
bytes2str(view.name)))
|
||||
|
||||
return Column.open(view, alias_b)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def open(View view,
|
||||
object column_name):
|
||||
cdef bytes column_name_b = tobytes(column_name)
|
||||
cdef OBIDMS_column_p* column_pp
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef Column column
|
||||
cdef obitype_t column_type
|
||||
cdef type column_class
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
column_pp = obi_view_get_pointer_on_column_in_view(view.pointer(),
|
||||
column_name_b)
|
||||
|
||||
if column_pp == NULL:
|
||||
raise KeyError("Cannot access to column %s in view %s" % (
|
||||
bytes2str(column_name_b),
|
||||
bytes2str(view.name)
|
||||
))
|
||||
|
||||
column_p = column_pp[0]
|
||||
column_type = column_p.header.returned_data_type
|
||||
column_class = Column.get_column_class(column_type, (column_p.header.nb_elements_per_line > 1))
|
||||
column = OBIWrapper.new(column_class, column_pp)
|
||||
|
||||
column._view = view
|
||||
column._alias = column_name_b
|
||||
view.register(column)
|
||||
|
||||
return column
|
||||
|
||||
|
||||
def add_to_view(self,
|
||||
View view,
|
||||
object column_name=None) :
|
||||
|
||||
cdef bytes alias
|
||||
cdef OBIDMS_column_p column_p = self.pointer()
|
||||
|
||||
if not view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
if (column_name is None):
|
||||
alias = self._alias
|
||||
else:
|
||||
alias = tobytes(column_name)
|
||||
|
||||
if (obi_view_add_column(view = view.pointer(),
|
||||
column_name = column_p.header.name,
|
||||
version_number = column_p.header.version,
|
||||
alias = alias,
|
||||
data_type = <obitype_t>0,
|
||||
nb_lines = -1,
|
||||
nb_elements_per_line = -1,
|
||||
elements_names = NULL,
|
||||
indexer_name = NULL,
|
||||
associated_column_name = NULL,
|
||||
associated_column_version = -1,
|
||||
comments = NULL,
|
||||
create = False) < 0):
|
||||
raise RuntimeError("Cannot insert column %s (%s@%d) into view %s" %
|
||||
( bytes2str(alias),
|
||||
bytes2str(column_p.header.name),
|
||||
column_p.header.version,
|
||||
bytes2str(view.name)
|
||||
))
|
||||
|
||||
view.register(self)
|
||||
|
||||
|
||||
def __len__(self):
|
||||
'''
|
||||
implements the len() function for the Column class
|
||||
|
||||
@rtype: `int`
|
||||
'''
|
||||
return self.lines_used
|
||||
|
||||
|
||||
def __sizeof__(self):
|
||||
'''
|
||||
returns the size of the C object wrapped by the Column instance
|
||||
'''
|
||||
cdef OBIDMS_column_header_p header = self.pointer().header
|
||||
return header.header_size + header.data_size
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
cdef index_t line_nb
|
||||
|
||||
for line_nb in range(self.lines_used):
|
||||
yield self[line_nb]
|
||||
|
||||
|
||||
def __setitem__(self, index_t line_nb, object value):
|
||||
self.set_line(line_nb, value)
|
||||
|
||||
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return self.get_line(line_nb)
|
||||
|
||||
|
||||
def __str__(self) :
|
||||
cdef str to_print
|
||||
cdef Column_line line
|
||||
to_print = ''
|
||||
for line in self :
|
||||
to_print = to_print + str(line) + "\n"
|
||||
return to_print
|
||||
|
||||
|
||||
def __repr__(self) :
|
||||
cdef bytes s
|
||||
s = self._alias + b", original name: " + self.original_name + b", version " + str2bytes(str(self.version)) + b", data type: " + self.data_type
|
||||
return bytes2str(s) # TODO can't return bytes
|
||||
|
||||
|
||||
cpdef close(self): # TODO discuss, can't be called bc then bug when closing view that tries to close it in C
|
||||
|
||||
cdef OBIDMS_column_p pointer
|
||||
|
||||
if self.active() :
|
||||
pointer = self.pointer()
|
||||
self._view.unregister(self)
|
||||
OBIWrapper.close(self)
|
||||
#if obi_close_column(pointer) < 0 :
|
||||
# raise Exception("Problem closing column %s" % bytes2str(self.name))
|
||||
|
||||
|
||||
# Column alias property getter and setter
|
||||
@property
|
||||
def name(self):
|
||||
return self._alias
|
||||
@name.setter
|
||||
def name(self, new_alias): # @DuplicatedSignature
|
||||
self._view.rename_column(self._alias, new_alias)
|
||||
|
||||
# elements_names property getter
|
||||
@property
|
||||
def elements_names(self):
|
||||
return obi_get_elements_names(self.pointer()).split(b';')
|
||||
|
||||
# nb_elements_per_line property getter
|
||||
@property
|
||||
def nb_elements_per_line(self):
|
||||
return self.pointer().header.nb_elements_per_line
|
||||
|
||||
# data_type property getter
|
||||
@property
|
||||
def data_type(self):
|
||||
return name_data_type(self.pointer().header.returned_data_type)
|
||||
|
||||
# original_name property getter
|
||||
@property
|
||||
def original_name(self):
|
||||
return self.pointer().header.name
|
||||
|
||||
# version property getter
|
||||
@property
|
||||
def version(self):
|
||||
return self.pointer().header.version
|
||||
|
||||
# lines_used property getter
|
||||
@property
|
||||
def lines_used(self):
|
||||
return self.pointer().header.lines_used
|
||||
|
||||
# comments property getter
|
||||
@property
|
||||
def comments(self):
|
||||
return self.pointer().header.comments
|
||||
|
||||
# creation_date property getter
|
||||
@property
|
||||
def creation_date(self):
|
||||
return obi_format_date(self.pointer().header.creation_date)
|
||||
|
||||
|
||||
######################################################################################################
|
||||
|
||||
|
||||
cdef class Column_multi_elts(Column) :
|
||||
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return Column_line(self, line_nb)
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object values):
|
||||
for element_name in values :
|
||||
self.set_item(line_nb, element_name, values[element_name])
|
||||
|
||||
|
||||
######################################################################################################
|
||||
|
||||
|
||||
cdef class Column_line :
|
||||
|
||||
def __init__(self, Column column, index_t line_nb) :
|
||||
self._index = line_nb
|
||||
self._column = column
|
||||
|
||||
|
||||
def __getitem__(self, object elt_id) :
|
||||
return self._column.get_item(self._index, elt_id)
|
||||
|
||||
|
||||
def __setitem__(self, object elt_id, object value):
|
||||
self._column.set_item(self._index, elt_id, value)
|
||||
|
||||
|
||||
def __contains__(self, str element_name):
|
||||
return (element_name in self._column.elements_names)
|
||||
|
||||
|
||||
def __repr__(self) :
|
||||
return str(self._column.get_line(self._index))
|
||||
|
||||
|
||||
cpdef update(self, data): # TODO ?????
|
||||
if isinstance(data, dict):
|
||||
data=data.items()
|
||||
for key,value in data:
|
||||
if key in self:
|
||||
self[key]=value
|
||||
|
||||
|
||||
######################################################################################################
|
||||
|
||||
|
||||
cdef register_column_class(obitype_t obitype,
|
||||
bint multi_elts,
|
||||
type obiclass,
|
||||
type python_type):
|
||||
'''
|
||||
Each sub class of `OBIDMS_column` needs to be registered after its declaration
|
||||
to declare its relationship with an `OBIType_t`
|
||||
'''
|
||||
global __OBIDMS_COLUMN_CLASS__
|
||||
|
||||
assert issubclass(obiclass, Column)
|
||||
|
||||
__OBIDMS_COLUMN_CLASS__[(obitype, multi_elts)] = (obiclass, python_type)
|
||||
|
||||
|
||||
cdef register_all_column_classes() :
|
||||
|
||||
x = list(pkgutil.walk_packages(typed_column.__path__, prefix="obitools3.dms.column.typed_column."))
|
||||
all_modules = [importlib.import_module(a[1]) for a in x]
|
||||
for mod in all_modules :
|
||||
getattr(mod, 'register_class')()
|
||||
|
||||
|
||||
register_all_column_classes()
|
||||
|
||||
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
#from .bool import Column_bool
|
||||
#from .int import Column_int
|
||||
# TODO why is this needed?
|
@ -1,44 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_bool(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_bool(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# cdef class Column_line_bool(Column_line) :
|
||||
#
|
||||
# @staticmethod
|
||||
# cdef bool obibool_t2bool(obibool_t value)
|
||||
#
|
||||
# @staticmethod
|
||||
# cdef bool2obibool_t(bool value)
|
||||
#
|
||||
# cpdef bool get_bool_item_by_name(self,bytes element_name)
|
||||
# cpdef bool get_bool_item_by_idx(self,index_t index)
|
||||
# cpdef set_bool_item_by_name(self,bytes element_name,bool value)
|
||||
# cpdef set_bool_item_by_idx(self,index_t index,bool value)
|
||||
#
|
||||
#
|
||||
# # cdef obibool_t [:] _data_view
|
||||
#
|
@ -1,313 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_bool_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_bool_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_bool_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_bool_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_BOOL, OBIBool_NA, obibool_t
|
||||
|
||||
from cpython.bool cimport PyBool_FromLong
|
||||
|
||||
|
||||
cdef class Column_bool(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
return Column.new_column(view, column_name, OBI_BOOL,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obibool_t value
|
||||
cdef object result
|
||||
value = obi_get_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIBool_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyBool_FromLong(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIBool_NA
|
||||
if obi_set_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, <obibool_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_bool(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef obibool_t value
|
||||
cdef object result
|
||||
cdef bytes elt_name
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_bool_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIBool_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyBool_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obibool_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIBool_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = PyBool_FromLong(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value) :
|
||||
cdef bytes elt_name
|
||||
if value is None :
|
||||
value = OBIBool_NA
|
||||
if type(elt_id) == int :
|
||||
if obi_set_bool_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, <obibool_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_bool_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, <obibool_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class() :
|
||||
register_column_class(OBI_BOOL, False, Column_bool, bool)
|
||||
register_column_class(OBI_BOOL, True, Column_multi_elts_bool, bool)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# cdef class Column_line_bool(Column_line) :
|
||||
#
|
||||
# cdef update_pointer(self):
|
||||
# """
|
||||
# Checks if the obicolumn address changed since the last call and update
|
||||
# if need the `_column_p` and `_data_view` data structure fields.
|
||||
# """
|
||||
# cdef OBIDMS_column_p* column_pp
|
||||
# column_pp = <OBIDMS_column_p*>self._pointer
|
||||
# cdef OBIDMS_column_p column_p = column_pp[0]
|
||||
#
|
||||
# if column_p != self._column_p:
|
||||
# self._column_p = column_p
|
||||
# self._data_view = (<obibool_t*> (column_p.data)) + \
|
||||
# self._index * column_p.header.nb_elements_per_line
|
||||
#
|
||||
# @staticmethod
|
||||
# cdef bool obibool_t2bool(obibool_t value):
|
||||
# cdef bool result
|
||||
#
|
||||
# if value == OBIBool_NA :
|
||||
# result = None
|
||||
# else :
|
||||
# result = PyBool_FromLong(value)
|
||||
#
|
||||
# return result
|
||||
#
|
||||
# @staticmethod
|
||||
# cdef bool2obibool_t(bool value):
|
||||
# cdef obibool_t result
|
||||
#
|
||||
# if value is None:
|
||||
# result=OBIBool_NA
|
||||
# else:
|
||||
# result= <obibool_t> <int> value
|
||||
#
|
||||
# return result
|
||||
#
|
||||
#
|
||||
# def __init__(self, Column column, index_t line_nb) :
|
||||
# """
|
||||
# Creates a new `OBIDMS_column_line_bool`
|
||||
#
|
||||
# @param column: an OBIDMS_column instance
|
||||
# @param line_nb: the line in the column
|
||||
# """
|
||||
#
|
||||
# Column_line.__init__(self, column, line_nb)
|
||||
# self.update_pointer()
|
||||
#
|
||||
#
|
||||
#
|
||||
# cpdef bool get_bool_item_by_name(self, bytes element_name) :
|
||||
# """
|
||||
# Returns the value associated to the name `element_name` of the current line
|
||||
#
|
||||
# @param element_name: a `bytes` instance containing the name of the element
|
||||
#
|
||||
# @return: the `bool` value corresponding to the name
|
||||
# """
|
||||
# cdef char* cname = element_name
|
||||
# cdef obibool_t value
|
||||
# global obi_errno
|
||||
#
|
||||
# self.update_pointer()
|
||||
#
|
||||
# cdef OBIDMS_column_p* column_pp
|
||||
# column_pp = <OBIDMS_column_p*>self._pointer
|
||||
# cdef OBIDMS_column_p column_p = column_pp[0]
|
||||
#
|
||||
# value = obi_column_get_obibool_with_elt_name(column_p,
|
||||
# self._index,
|
||||
# cname)
|
||||
#
|
||||
# if obi_errno > 0 :
|
||||
# obi_errno = 0
|
||||
# raise KeyError("Cannot access to key %s" % bytes2str(element_name))
|
||||
#
|
||||
# return Column_line_bool.obibool_t2bool(value)
|
||||
#
|
||||
#
|
||||
# cpdef bool get_bool_item_by_idx(self,index_t index):
|
||||
# """
|
||||
# Returns the value associated to the name `element_name` of the current line
|
||||
#
|
||||
# @param index: a `int` instance containing the index of the element
|
||||
#
|
||||
# @return: the `bool` value corresponding to the name
|
||||
# """
|
||||
# cdef obibool_t value # @DuplicatedSignature
|
||||
# global obi_errno
|
||||
#
|
||||
# cdef OBIDMS_column_p* column_pp
|
||||
# column_pp = <OBIDMS_column_p*>self._pointer
|
||||
# cdef OBIDMS_column_p column_p = column_pp[0]
|
||||
#
|
||||
# self.update_pointer()
|
||||
#
|
||||
# value = obi_column_get_obibool_with_elt_idx(column_p,
|
||||
# self._index,
|
||||
# index)
|
||||
#
|
||||
# if obi_errno > 0 :
|
||||
# obi_errno = 0
|
||||
# raise IndexError("Cannot access to element %d" % index)
|
||||
#
|
||||
# return Column_line_bool.obibool_t2bool(value)
|
||||
#
|
||||
#
|
||||
# def __getitem__(self, object element_name) :
|
||||
# cdef bytes name
|
||||
# cdef int cindex
|
||||
# cdef obibool_t value
|
||||
# cdef type typearg = type(element_name)
|
||||
# cdef bool result
|
||||
#
|
||||
#
|
||||
# if typearg == int:
|
||||
# cindex=element_name
|
||||
# if cindex < 0:
|
||||
# cindex = self._len - cindex
|
||||
# result=self.get_bool_item_by_idx(cindex)
|
||||
# elif typearg == bytes:
|
||||
# result=self.get_bool_item_by_name(element_name)
|
||||
# elif typearg == str:
|
||||
# name = str2bytes(element_name)
|
||||
# result=self.get_bool_item_by_name(name)
|
||||
#
|
||||
# return result
|
||||
#
|
||||
# cpdef set_bool_item_by_name(self,bytes element_name,bool value):
|
||||
# """
|
||||
# Sets the value associated to the name `element_name` of the current line
|
||||
#
|
||||
# @param element_name: a `bytes` instance containing the name of the element
|
||||
# @param value: a `bool` instance of the new value
|
||||
#
|
||||
# @return: the `bool` value corresponding to the name
|
||||
# """
|
||||
# cdef char* cname = element_name
|
||||
# cdef obibool_t cvalue
|
||||
#
|
||||
# self.update_pointer()
|
||||
# cvalue = OBIDMS_column_line_bool.bool2obibool_t(value)
|
||||
#
|
||||
# if ( obi_column_set_obibool_with_elt_name((<OBIDMS_column_p*>self._pointer)[0],
|
||||
# self._index,
|
||||
# cname,
|
||||
# cvalue) < 0 ):
|
||||
# raise KeyError("Cannot access to key %s" % bytes2str(element_name))
|
||||
#
|
||||
# cpdef set_bool_item_by_idx(self,index_t index,bool value):
|
||||
# """
|
||||
# Sets the value associated to the name `element_name` of the current line
|
||||
#
|
||||
# @param index: a `int` instance containing the index of the element
|
||||
# @param value: a `bool` instance of the new value
|
||||
#
|
||||
# @return: the `bool` value corresponding to the name
|
||||
# """
|
||||
# cdef obibool_t cvalue # @DuplicatedSignature
|
||||
#
|
||||
# self.update_pointer()
|
||||
# cvalue = OBIDMS_column_line_bool.bool2obibool_t(value)
|
||||
#
|
||||
# if ( obi_column_set_obibool_with_elt_idx((<OBIDMS_column_p*>self._pointer)[0],
|
||||
# self._index,
|
||||
# index,
|
||||
# cvalue) < 0 ):
|
||||
# raise IndexError("Cannot access to item index %d" % index)
|
||||
#
|
||||
#
|
||||
#
|
||||
# def __setitem__(self, object element_name, object value):
|
||||
# cdef bytes name
|
||||
# cdef int cindex
|
||||
# cdef type typearg = type(element_name)
|
||||
# cdef bool result
|
||||
#
|
||||
#
|
||||
# if typearg == int:
|
||||
# cindex=element_name
|
||||
# if cindex < 0:
|
||||
# cindex = self._len - cindex
|
||||
# self.set_bool_item_by_idx(cindex,value)
|
||||
# elif typearg == bytes:
|
||||
# self.set_bool_item_by_name(element_name,value)
|
||||
# elif typearg == str:
|
||||
# name = str2bytes(element_name)
|
||||
# self.set_bool_item_by_name(name,value)
|
||||
#
|
||||
# def __repr__(self) :
|
||||
# return str(self._column.get_line(self._index))
|
||||
#
|
||||
# def __len__(self):
|
||||
# return self._len
|
@ -1,20 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_char(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_char(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
@ -1,114 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_char_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_char_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_char_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_char_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_CHAR, OBIChar_NA, obichar_t
|
||||
|
||||
|
||||
|
||||
cdef class Column_char(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_CHAR,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obichar_t value
|
||||
cdef object result
|
||||
value = obi_get_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIChar_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <bytes>value # TODO return bytes or str?
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef obichar_t value_b
|
||||
if value is None :
|
||||
value_b = OBIChar_NA
|
||||
else :
|
||||
value_b = <obichar_t> tobytes(value)[0]
|
||||
if obi_set_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_char(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef obichar_t value
|
||||
cdef object result
|
||||
cdef bytes elt_name
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_char_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIChar_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <bytes>value # TODO return bytes or str?
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obichar_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIChar_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = <bytes>value # TODO return bytes or str?
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value) :
|
||||
cdef bytes elt_name
|
||||
cdef obichar_t value_b
|
||||
if value is None :
|
||||
value_b = OBIChar_NA
|
||||
else :
|
||||
value_b = <obichar_t> tobytes(value)[0]
|
||||
if type(elt_id) == int :
|
||||
if obi_set_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, value_b) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_char_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, value_b) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_CHAR, False, Column_char, bytes) # TODO bytes or str?
|
||||
register_column_class(OBI_CHAR, True, Column_multi_elts_char, bytes) # TODO bytes or str?
|
||||
|
@ -1,21 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_float(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_float(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
@ -1,110 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_float_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_float_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_float_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_float_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_FLOAT, OBIFloat_NA, obifloat_t
|
||||
|
||||
|
||||
|
||||
cdef class Column_float(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_FLOAT,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obifloat_t value
|
||||
cdef object result
|
||||
value = obi_get_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIFloat_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <double> value
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIFloat_NA
|
||||
if obi_set_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, <obifloat_t> value) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_float(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef obifloat_t value
|
||||
cdef object result
|
||||
cdef bytes elt_name
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_float_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIFloat_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <double> value
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obifloat_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIFloat_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = <double> value
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value) :
|
||||
cdef bytes elt_name
|
||||
if value is None :
|
||||
value = OBIFloat_NA
|
||||
if type(elt_id) == int :
|
||||
if obi_set_float_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, <obifloat_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_float_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, <obifloat_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_FLOAT, False, Column_float, float) # TODO why not double?
|
||||
register_column_class(OBI_FLOAT, True, Column_multi_elts_float, float) # TODO why not double?
|
||||
|
@ -1,21 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_int(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_int(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
@ -1,111 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_int_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_int_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_int_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_int_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_INT, OBIInt_NA, obiint_t
|
||||
|
||||
from cpython.int cimport PyInt_FromLong
|
||||
|
||||
|
||||
cdef class Column_int(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_INT,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obiint_t value
|
||||
cdef object result
|
||||
value = obi_get_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIInt_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyInt_FromLong(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIInt_NA
|
||||
if obi_set_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, <obiint_t> value) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_int(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef obiint_t value
|
||||
cdef object result
|
||||
cdef bytes elt_name
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_int_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIInt_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyInt_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obiint_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIInt_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = PyInt_FromLong(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value) :
|
||||
cdef bytes elt_name
|
||||
if value is None :
|
||||
value = OBIInt_NA
|
||||
if type(elt_id) == int :
|
||||
if obi_set_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, <obiint_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_int_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, <obiint_t> value) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_INT, False, Column_int, int)
|
||||
register_column_class(OBI_INT, True, Column_multi_elts_int, int)
|
||||
|
@ -1,26 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_qual(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef object get_str_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
cpdef set_str_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_qual(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_str_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef object get_str_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
cpdef set_str_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
@ -1,236 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, bytes2str, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_qual_char_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_qual_char_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_qual_char_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_qual_char_with_elt_idx_and_col_p_in_view, \
|
||||
obi_get_qual_int_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_qual_int_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_qual_int_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_qual_int_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_QUAL, OBIQual_char_NA, OBIQual_int_NA, const_char_p
|
||||
|
||||
from libc.stdlib cimport free
|
||||
from libc.stdint cimport uint8_t
|
||||
from libc.stdlib cimport malloc
|
||||
|
||||
|
||||
cdef class Column_qual(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_QUAL,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef const uint8_t* value
|
||||
cdef int value_length
|
||||
cdef object result
|
||||
value = obi_get_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, &value_length)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_int_NA :
|
||||
result = None
|
||||
else :
|
||||
result = []
|
||||
for i in range(value_length) :
|
||||
result.append(<int>value[i])
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_str_line(self, index_t line_nb):
|
||||
cdef char* value
|
||||
cdef object result
|
||||
cdef int i
|
||||
value = obi_get_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_char_NA :
|
||||
result = None
|
||||
else : # TODO discuss
|
||||
result = bytes2str(value)
|
||||
free(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef uint8_t* value_b
|
||||
cdef int value_length
|
||||
if value is None :
|
||||
if obi_set_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, OBIQual_int_NA, 0) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
value_length = len(value)
|
||||
value_b = <uint8_t*> malloc(value_length * sizeof(uint8_t))
|
||||
for i in range(value_length) :
|
||||
value_b[i] = <uint8_t>value[i]
|
||||
if obi_set_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, value_b, value_length) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
free(value_b)
|
||||
|
||||
|
||||
cpdef set_str_line(self, index_t line_nb, object value):
|
||||
cdef bytes value_b
|
||||
if value is None :
|
||||
if obi_set_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, OBIQual_char_NA) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
value_b = tobytes(value)
|
||||
if obi_set_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_qual(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id):
|
||||
cdef const uint8_t* value
|
||||
cdef int value_length
|
||||
cdef object result
|
||||
cdef int i
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, &value_length)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_qual_int_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, &value_length)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_int_NA :
|
||||
result = None
|
||||
else :
|
||||
result = []
|
||||
for i in range(value_length) :
|
||||
result.append(<int>value[i])
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_str_item(self, index_t line_nb, object elt_id):
|
||||
cdef char* value
|
||||
cdef object result
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_qual_char_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_char_NA :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value) # TODO return bytes?
|
||||
free(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef const uint8_t* value
|
||||
cdef int value_length
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef int j
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i, &value_length)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_int_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = []
|
||||
for j in range(value_length) :
|
||||
value_in_result.append(<int>value[j])
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_str_line(self, index_t line_nb) :
|
||||
cdef char* value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIQual_char_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = bytes2str(value)
|
||||
free(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value):
|
||||
cdef uint8_t* value_b
|
||||
cdef int value_length
|
||||
cdef bytes elt_name
|
||||
|
||||
if value is None :
|
||||
value_b = OBIQual_int_NA
|
||||
value_length = 0
|
||||
else :
|
||||
value_length = len(value)
|
||||
value_b = <uint8_t*> malloc(value_length * sizeof(uint8_t))
|
||||
for i in range(value_length) :
|
||||
value_b[i] = <uint8_t>value[i]
|
||||
|
||||
if type(elt_id) == int :
|
||||
if obi_set_qual_int_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, value_b, value_length) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_qual_int_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, value_b, value_length) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
if value is not None :
|
||||
free(value_b)
|
||||
|
||||
|
||||
cpdef set_str_item(self, index_t line_nb, object elt_id, object value):
|
||||
cdef bytes value_b
|
||||
cdef bytes elt_name
|
||||
|
||||
if value is None :
|
||||
value_b = OBIQual_char_NA
|
||||
else :
|
||||
value_b = tobytes(value)
|
||||
|
||||
if type(elt_id) == int :
|
||||
if obi_set_qual_char_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, value_b) < 0 :
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_qual_char_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_QUAL, False, Column_qual, bytes) # TODO str? int?
|
||||
register_column_class(OBI_QUAL, True, Column_multi_elts_qual, bytes) # TODO str? int?
|
||||
|
@ -1,21 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_seq(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_seq(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
@ -1,137 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_seq_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_seq_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_seq_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_seq_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_SEQ, OBISeq_NA
|
||||
|
||||
from libc.stdlib cimport free
|
||||
|
||||
|
||||
cdef class Column_seq(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_SEQ,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef char* value
|
||||
cdef object result
|
||||
value = obi_get_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBISeq_NA :
|
||||
result = None
|
||||
else : # TODO
|
||||
try:
|
||||
result = <bytes> value
|
||||
finally:
|
||||
free(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef char* value_b
|
||||
cdef bytes value_bytes
|
||||
|
||||
if value is None :
|
||||
value_b = <char*>OBISeq_NA
|
||||
else :
|
||||
value_bytes = tobytes(value)
|
||||
value_b = <char*>value_bytes
|
||||
|
||||
if obi_set_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_seq(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef char* value
|
||||
cdef object result
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_seq_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBISeq_NA :
|
||||
result = None
|
||||
else :
|
||||
try:
|
||||
result = <bytes> value
|
||||
finally:
|
||||
free(value)
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef char* value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBISeq_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
try:
|
||||
value_in_result = <bytes> value
|
||||
finally:
|
||||
free(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value):
|
||||
|
||||
cdef bytes elt_name
|
||||
cdef char* value_b
|
||||
cdef bytes value_bytes
|
||||
|
||||
if value is None :
|
||||
value_b = <char*>OBISeq_NA
|
||||
else :
|
||||
value_bytes = tobytes(value)
|
||||
value_b = <char*>value_bytes
|
||||
|
||||
if type(elt_id) == int :
|
||||
if obi_set_seq_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_seq_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_SEQ, False, Column_seq, bytes) # TODO str?
|
||||
register_column_class(OBI_SEQ, True, Column_multi_elts_seq, bytes) # TODO str?
|
||||
|
@ -1,21 +0,0 @@
|
||||
# #cython: language_level=3
|
||||
|
||||
|
||||
from ...capi.obitypes cimport index_t
|
||||
|
||||
from ..column cimport Column, \
|
||||
Column_multi_elts
|
||||
|
||||
|
||||
cdef class Column_str(Column) :
|
||||
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
|
||||
cdef class Column_multi_elts_str(Column_multi_elts) :
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value)
|
||||
|
@ -1,124 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..column cimport register_column_class
|
||||
|
||||
from ...view.view cimport View
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
obi_errno_to_exception
|
||||
|
||||
from ...capi.obiview cimport obi_get_str_with_elt_name_and_col_p_in_view, \
|
||||
obi_get_str_with_elt_idx_and_col_p_in_view, \
|
||||
obi_set_str_with_elt_name_and_col_p_in_view, \
|
||||
obi_set_str_with_elt_idx_and_col_p_in_view
|
||||
|
||||
from ...capi.obitypes cimport OBI_STR, OBIStr_NA, const_char_p
|
||||
|
||||
|
||||
cdef class Column_str(Column):
|
||||
|
||||
@staticmethod
|
||||
def new(View view,
|
||||
object column_name,
|
||||
index_t nb_elements_per_line=1,
|
||||
object elements_names=None,
|
||||
object comments=b""):
|
||||
|
||||
return Column.new_column(view, column_name, OBI_STR,
|
||||
nb_elements_per_line=nb_elements_per_line,
|
||||
elements_names=elements_names,
|
||||
comments=comments)
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef const_char_p value
|
||||
cdef object result
|
||||
value = obi_get_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem getting a value from a column")
|
||||
if value == OBIStr_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <bytes> value # NOTE: value is not freed because the pointer points to a mmapped region in an AVL data file.
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef char* value_b
|
||||
cdef bytes value_bytes
|
||||
|
||||
if value is None :
|
||||
value_b = <char*>OBIStr_NA
|
||||
else :
|
||||
value_bytes = tobytes(value)
|
||||
value_b = <char*>value_bytes
|
||||
|
||||
if obi_set_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, 0, value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=None, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class Column_multi_elts_str(Column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, object elt_id) :
|
||||
cdef const_char_p value
|
||||
cdef object result
|
||||
if type(elt_id) == int :
|
||||
value = obi_get_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id)
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
value = obi_get_str_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem getting a value from a column")
|
||||
if value == OBIStr_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <bytes> value # NOTE: value is not freed because the pointer points to a mmapped region in an AVL data file.
|
||||
return result
|
||||
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef const_char_p value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_get_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, i)
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=i, error_message="Problem getting a value from a column")
|
||||
if value == OBIStr_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = <bytes> value
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
|
||||
cpdef set_item(self, index_t line_nb, object elt_id, object value):
|
||||
cdef bytes elt_name
|
||||
cdef char* value_b
|
||||
cdef bytes value_bytes
|
||||
|
||||
if value is None :
|
||||
value_b = <char*>OBIStr_NA
|
||||
else :
|
||||
value_bytes = tobytes(value)
|
||||
value_b = <char*>value_bytes
|
||||
|
||||
if type(elt_id) == int :
|
||||
if obi_set_str_with_elt_idx_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_id, <char*>value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
else :
|
||||
elt_name = tobytes(elt_id)
|
||||
if obi_set_str_with_elt_name_and_col_p_in_view(self._view.pointer(), self.pointer(), line_nb, elt_name, <char*>value_b) < 0:
|
||||
obi_errno_to_exception(line_nb=line_nb, elt_id=elt_id, error_message="Problem setting a value in a column")
|
||||
|
||||
|
||||
def register_class():
|
||||
register_column_class(OBI_STR, False, Column_str, bytes) # TODO str?
|
||||
register_column_class(OBI_STR, True, Column_multi_elts_str, bytes) # TODO str?
|
||||
|
@ -1,33 +0,0 @@
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.c
|
||||
../../../src/hashtable.c
|
||||
../../../src/linked_list.c
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obi_align.c
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_blob.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_qual.c
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.c
|
||||
../../../src/sse_banded_LCS_alignment.c
|
||||
../../../src/uint8_indexer.c
|
||||
../../../src/upperband.c
|
||||
../../../src/utils.c
|
@ -1,11 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .object cimport OBIWrapper
|
||||
|
||||
from .capi.obidms cimport OBIDMS_p
|
||||
|
||||
|
||||
cdef class DMS(OBIWrapper):
|
||||
|
||||
cdef inline OBIDMS_p pointer(self)
|
||||
cpdef int view_count(self)
|
@ -1,152 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from libc.stdlib cimport free
|
||||
from cpython.list cimport PyList_Size
|
||||
|
||||
from .capi.obidms cimport obi_open_dms, \
|
||||
obi_test_open_dms, \
|
||||
obi_create_dms, \
|
||||
obi_close_dms, \
|
||||
obi_dms_get_full_path
|
||||
|
||||
from .capi.obitypes cimport const_char_p
|
||||
|
||||
from obitools3.utils cimport bytes2str, \
|
||||
str2bytes, \
|
||||
tobytes, \
|
||||
tostr
|
||||
|
||||
from .object cimport OBIObjectClosedInstance
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from .view import view
|
||||
|
||||
|
||||
cdef class DMS(OBIWrapper):
|
||||
|
||||
cdef inline OBIDMS_p pointer(self):
|
||||
return <OBIDMS_p>(self._pointer)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def new(object dms_name) :
|
||||
cdef OBIDMS_p pointer
|
||||
cdef DMS dms
|
||||
cdef bytes dms_name_b = tobytes(dms_name)
|
||||
pointer = obi_create_dms(<const_char_p> dms_name_b)
|
||||
if pointer == NULL :
|
||||
raise Exception("Failed creating an OBIDMS")
|
||||
dms = OBIWrapper.new(DMS, pointer)
|
||||
return dms
|
||||
|
||||
|
||||
@staticmethod
|
||||
def open(object dms_name) :
|
||||
cdef OBIDMS_p pointer
|
||||
cdef DMS dms
|
||||
cdef bytes dms_name_b = tobytes(dms_name)
|
||||
pointer = obi_open_dms(<const_char_p> dms_name_b)
|
||||
if pointer == NULL :
|
||||
raise Exception("Failed opening an OBIDMS")
|
||||
dms = OBIWrapper.new(DMS, pointer)
|
||||
return dms
|
||||
|
||||
|
||||
@staticmethod
|
||||
def test_open(object dms_name) :
|
||||
cdef OBIDMS_p pointer
|
||||
cdef DMS dms
|
||||
cdef bytes dms_name_b = tobytes(dms_name)
|
||||
pointer = obi_test_open_dms(<const_char_p> dms_name_b)
|
||||
if pointer == NULL :
|
||||
raise Exception("Failed opening an OBIDMS")
|
||||
dms = OBIWrapper.new(DMS, pointer)
|
||||
return dms
|
||||
|
||||
|
||||
def close(self) :
|
||||
'''
|
||||
Closes the DMS instance and free the associated memory
|
||||
|
||||
The `close` method is automatically called by the object destructor.
|
||||
'''
|
||||
cdef OBIDMS_p pointer = self.pointer()
|
||||
|
||||
if self.active() :
|
||||
OBIWrapper.close(self)
|
||||
if (obi_close_dms(pointer)) < 0 :
|
||||
raise Exception("Problem closing an OBIDMS")
|
||||
|
||||
|
||||
# name property getter
|
||||
@property
|
||||
def name(self) :
|
||||
'''
|
||||
Returns the name of the DMS instance
|
||||
|
||||
@rtype: bytes
|
||||
'''
|
||||
return <bytes> self.pointer().dms_name
|
||||
|
||||
|
||||
def keys(self) :
|
||||
|
||||
cdef const_char_p path = obi_dms_get_full_path(self.pointer(), b"VIEWS")
|
||||
|
||||
if path == NULL:
|
||||
raise RuntimeError("Cannot retrieve the view database path")
|
||||
|
||||
p = Path(bytes2str(path))
|
||||
|
||||
free(path)
|
||||
|
||||
for v in p.glob("*.obiview") :
|
||||
yield str2bytes(v.stem)
|
||||
|
||||
|
||||
def values(self) :
|
||||
cdef bytes view_name
|
||||
for view_name in self.keys():
|
||||
yield self.get_view(view_name)
|
||||
|
||||
|
||||
def items(self) :
|
||||
cdef bytes view_name
|
||||
for view_name in self.keys():
|
||||
yield (view_name, self.get_view(view_name))
|
||||
|
||||
|
||||
def __contains__(self, key) :
|
||||
|
||||
cdef str key_s = tostr(key)
|
||||
|
||||
cdef const_char_p path = obi_dms_get_full_path(self.pointer(), b"VIEWS")
|
||||
p = Path(bytes2str(path),key_s)
|
||||
|
||||
free(path)
|
||||
|
||||
return p.with_suffix(".obiview").is_file()
|
||||
|
||||
|
||||
cpdef int view_count(self) :
|
||||
return PyList_Size(list(self.keys()))
|
||||
|
||||
|
||||
def __len__(self) :
|
||||
return self.view_count()
|
||||
|
||||
|
||||
def __getitem__(self, object view_name):
|
||||
return self.get_view(view_name)
|
||||
|
||||
|
||||
def __iter__(self) :
|
||||
return self.keys()
|
||||
|
||||
|
||||
def get_view(self, object view_name) :
|
||||
return view.View.open(self, view_name)
|
||||
|
||||
|
@ -1,22 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .view.view cimport Line
|
||||
|
||||
|
||||
cdef class Seq(dict) :
|
||||
|
||||
cdef str _id
|
||||
cdef object _seq
|
||||
cdef str _definition
|
||||
|
||||
|
||||
cdef class Nuc_Seq(Seq) :
|
||||
|
||||
cdef object _quality
|
||||
#cpdef object reverse_complement(self)
|
||||
|
||||
|
||||
cdef class Nuc_Seq_Stored(Line) :
|
||||
|
||||
cpdef object get_str_quality(self)
|
||||
#cpdef object reverse_complement(self)
|
@ -1,130 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport bytes2str, str2bytes
|
||||
|
||||
from .capi.obiview cimport NUC_SEQUENCE_COLUMN, \
|
||||
ID_COLUMN, \
|
||||
DEFINITION_COLUMN, \
|
||||
QUALITY_COLUMN
|
||||
|
||||
|
||||
NUC_SEQUENCE_COLUMN_str = bytes2str(NUC_SEQUENCE_COLUMN)
|
||||
ID_COLUMN_str = bytes2str(ID_COLUMN)
|
||||
DEFINITION_COLUMN_str = bytes2str(DEFINITION_COLUMN)
|
||||
QUALITY_COLUMN_str = bytes2str(QUALITY_COLUMN)
|
||||
|
||||
|
||||
cdef class Seq(dict) :
|
||||
def __init__(self, str id, object seq, object definition=None) :
|
||||
self.id = id
|
||||
self.seq = seq
|
||||
if definition is not None :
|
||||
self.definition = definition
|
||||
|
||||
# sequence id property getter and setter
|
||||
@property
|
||||
def id(self): # @ReservedAssignment
|
||||
return self._id
|
||||
|
||||
@id.setter
|
||||
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
|
||||
self._id = new_id
|
||||
self[ID_COLUMN] = new_id
|
||||
|
||||
# sequence property getter and setter
|
||||
@property
|
||||
def seq(self):
|
||||
return self._seq
|
||||
|
||||
@seq.setter
|
||||
def seq(self, object new_seq): # @DuplicatedSignature
|
||||
self._seq = new_seq
|
||||
self["SEQ"] = new_seq # TODO discuss
|
||||
|
||||
# sequence definition property getter and setter
|
||||
@property
|
||||
def definition(self):
|
||||
return self._definition
|
||||
|
||||
@definition.setter
|
||||
def definition(self, object new_definition): # @DuplicatedSignature
|
||||
self._definition = new_definition
|
||||
self[DEFINITION_COLUMN_str] = new_definition
|
||||
|
||||
|
||||
cdef class Nuc_Seq(Seq) :
|
||||
|
||||
# nuc sequence property getter and setter
|
||||
@property
|
||||
def seq(self):
|
||||
return self._seq
|
||||
|
||||
@seq.setter
|
||||
def seq(self, object new_seq): # @DuplicatedSignature
|
||||
self._seq = new_seq
|
||||
self[NUC_SEQUENCE_COLUMN_str] = new_seq
|
||||
|
||||
# sequence quality property getter and setter
|
||||
@property
|
||||
def quality(self):
|
||||
return self._quality
|
||||
|
||||
@quality.setter
|
||||
def quality(self, object new_quality): # @DuplicatedSignature
|
||||
self._quality = new_quality
|
||||
self[QUALITY_COLUMN_str] = new_quality
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
|
||||
cdef class Nuc_Seq_Stored(Line) :
|
||||
|
||||
# sequence id property getter and setter
|
||||
@property
|
||||
def id(self): # @ReservedAssignment @DuplicatedSignature
|
||||
return self[ID_COLUMN_str]
|
||||
|
||||
@id.setter
|
||||
def id(self, str new_id): # @ReservedAssignment @DuplicatedSignature
|
||||
self[ID_COLUMN_str] = new_id
|
||||
|
||||
# sequence definition property getter and setter
|
||||
@property
|
||||
def definition(self):
|
||||
return self[DEFINITION_COLUMN_str]
|
||||
|
||||
@definition.setter
|
||||
def definition(self, str new_def): # @DuplicatedSignature
|
||||
self[DEFINITION_COLUMN_str] = new_def
|
||||
|
||||
# nuc_seq property getter and setter
|
||||
@property
|
||||
def nuc_seq(self):
|
||||
return self[NUC_SEQUENCE_COLUMN_str]
|
||||
|
||||
@nuc_seq.setter
|
||||
def nuc_seq(self, object new_seq): # @DuplicatedSignature
|
||||
self[NUC_SEQUENCE_COLUMN_str] = new_seq
|
||||
|
||||
# quality property getter and setter
|
||||
@property
|
||||
def quality(self):
|
||||
return self[QUALITY_COLUMN_str]
|
||||
|
||||
@quality.setter
|
||||
def quality(self, object new_qual): # @DuplicatedSignature
|
||||
if (type(new_qual) == list) or (new_qual is None) : # TODO check that quality column exists
|
||||
self[QUALITY_COLUMN_str] = new_qual
|
||||
else : # Quality is in str form
|
||||
self._view.get_column(QUALITY_COLUMN_str).set_str_line(self._index, new_qual)
|
||||
|
||||
cpdef object get_str_quality(self) : # TODO not ideal. Make quality_int and quality_str properties
|
||||
return self._view.get_column(QUALITY_COLUMN_str).get_str_line(self._index)
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
# TODO static method to import OBI_Nuc_Seq to OBI_Nuc_Seq_Stored ?
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
cdef dict __c_cython_mapping__
|
||||
|
||||
|
||||
cdef class OBIObject:
|
||||
|
||||
cdef dict _dependent_objects
|
||||
|
||||
cdef register(self, OBIObject object)
|
||||
cdef unregister(self, OBIObject object)
|
||||
cpdef close(self)
|
||||
|
||||
|
||||
cdef class OBIWrapper(OBIObject):
|
||||
|
||||
cdef void* _pointer
|
||||
|
||||
cdef inline size_t cid(self)
|
||||
cdef inline bint active(self)
|
||||
|
||||
@staticmethod
|
||||
cdef object new(type constructor, void* pointer)
|
||||
|
||||
|
||||
cdef class OBIObjectClosedInstance(Exception):
|
||||
pass
|
@ -1,89 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
__c_cython_mapping__ = {}
|
||||
|
||||
|
||||
cdef class OBIObject:
|
||||
|
||||
def __init__(self, __internalCall__) :
|
||||
|
||||
if __internalCall__ != 987654 or \
|
||||
type(self) == OBIObject or \
|
||||
type(self) == OBIWrapper or \
|
||||
not isinstance(self, OBIObject) :
|
||||
|
||||
raise RuntimeError('OBIObject constructor can not be called directly')
|
||||
|
||||
self._dependent_objects = {}
|
||||
|
||||
|
||||
cdef register(self, OBIObject object):
|
||||
self._dependent_objects[id(object)] = object
|
||||
|
||||
|
||||
cdef unregister(self, OBIObject object):
|
||||
del self._dependent_objects[id(object)]
|
||||
|
||||
|
||||
cpdef close(self):
|
||||
|
||||
cdef OBIObject object
|
||||
cdef list to_close = list((self._dependent_objects).values())
|
||||
|
||||
for object in to_close:
|
||||
object.close()
|
||||
|
||||
assert len(self._dependent_objects.values()) == 0
|
||||
|
||||
|
||||
cdef class OBIWrapper(OBIObject) :
|
||||
'''
|
||||
The OBIWrapper class enables to wrap a C object representing a DMS or an element from a DMS.
|
||||
'''
|
||||
|
||||
cdef inline size_t cid(self) :
|
||||
return <size_t>(self._pointer)
|
||||
|
||||
|
||||
cdef inline bint active(self) :
|
||||
return self._pointer != NULL
|
||||
|
||||
|
||||
cpdef close(self):
|
||||
if (self._pointer != NULL):
|
||||
OBIObject.close(self)
|
||||
del __c_cython_mapping__[<size_t>self._pointer]
|
||||
self._pointer = NULL
|
||||
|
||||
assert len(self._dependent_objects.values()) == 0
|
||||
|
||||
|
||||
def __dealloc__(self):
|
||||
'''
|
||||
Destructor of any OBI instance.
|
||||
|
||||
The destructor automatically calls the `close` method and
|
||||
therefore closes and frees all associated objects and memory.
|
||||
'''
|
||||
self.close()
|
||||
|
||||
|
||||
@staticmethod
|
||||
cdef object new(type constructor, void* pointer) :
|
||||
|
||||
cdef OBIWrapper o
|
||||
|
||||
if (<size_t>pointer in __c_cython_mapping__):
|
||||
#print("Pointer already in cython dict")
|
||||
return __c_cython_mapping__[<size_t>pointer]
|
||||
else:
|
||||
o = constructor(987654)
|
||||
o._pointer = pointer
|
||||
__c_cython_mapping__[<size_t>pointer] = o
|
||||
return o
|
||||
|
||||
|
||||
cdef class OBIDeactivatedInstanceError(Exception):
|
||||
pass
|
||||
|
@ -1,23 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from ..capi.obitaxonomy cimport ecotx_t, OBIDMS_taxonomy_p
|
||||
|
||||
from ..dms cimport DMS
|
||||
|
||||
from ..object cimport OBIWrapper
|
||||
|
||||
|
||||
cdef class OBI_Taxonomy(OBIWrapper) :
|
||||
cdef str _name # TODO keep as bytes?
|
||||
cdef DMS _dms
|
||||
|
||||
cdef inline OBIDMS_taxonomy_p pointer(self)
|
||||
|
||||
cpdef get_taxon_by_idx(self, int idx)
|
||||
cpdef write(self, str prefix)
|
||||
cpdef int add_taxon(self, str name, str rank_name, int parent_taxid, int min_taxid=*)
|
||||
cpdef close(self)
|
||||
|
||||
cdef class OBI_Taxon :
|
||||
cdef ecotx_t* _pointer
|
||||
cdef OBI_Taxonomy _tax
|
@ -1,196 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport str2bytes, bytes2str, tobytes
|
||||
|
||||
from ..capi.obitaxonomy cimport obi_read_taxonomy, \
|
||||
obi_read_taxdump, \
|
||||
obi_write_taxonomy, \
|
||||
obi_close_taxonomy, \
|
||||
obi_taxo_get_taxon_with_taxid, \
|
||||
obi_taxo_add_local_taxon, \
|
||||
obi_taxo_add_preferred_name_with_taxon, \
|
||||
ecotx_t
|
||||
|
||||
from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer
|
||||
|
||||
|
||||
cdef class OBI_Taxonomy(OBIWrapper) :
|
||||
# TODO function to import taxonomy?
|
||||
|
||||
cdef inline OBIDMS_taxonomy_p pointer(self) :
|
||||
return <OBIDMS_taxonomy_p>(self._pointer)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def open(DMS dms, str name, bint taxdump=False) :
|
||||
|
||||
cdef void* pointer
|
||||
cdef OBI_Taxonomy taxo
|
||||
|
||||
if taxdump :
|
||||
pointer = <void*>obi_read_taxdump(tobytes(name))
|
||||
else :
|
||||
pointer = <void*>obi_read_taxonomy(dms.pointer(), tobytes(name), True) # TODO discuss
|
||||
# TODO if not found in DMS, try to import?
|
||||
|
||||
if pointer == NULL :
|
||||
raise RuntimeError("Error : Cannot read taxonomy %s"
|
||||
% name)
|
||||
|
||||
taxo = OBIWrapper.new(OBI_Taxonomy, pointer)
|
||||
|
||||
dms.register(taxo)
|
||||
|
||||
taxo._dms = dms
|
||||
taxo._name = name
|
||||
|
||||
return taxo
|
||||
|
||||
|
||||
def __getitem__(self, object ref):
|
||||
|
||||
cdef ecotx_t* taxon_p
|
||||
cdef object taxon_capsule
|
||||
|
||||
if type(ref) == int :
|
||||
taxon_p = obi_taxo_get_taxon_with_taxid(self.pointer(), ref)
|
||||
if taxon_p == NULL :
|
||||
raise Exception("Taxon not found")
|
||||
taxon_capsule = PyCapsule_New(taxon_p, NULL, NULL)
|
||||
return OBI_Taxon(taxon_capsule, self)
|
||||
else :
|
||||
raise Exception("Not implemented")
|
||||
|
||||
|
||||
cpdef get_taxon_by_idx(self, int idx):
|
||||
|
||||
cdef ecotx_t* taxa
|
||||
cdef ecotx_t* taxon_p
|
||||
cdef object taxon_capsule
|
||||
|
||||
taxa = self.pointer().taxa.taxon
|
||||
taxon_p = <ecotx_t*> (taxa+idx)
|
||||
taxon_capsule = PyCapsule_New(taxon_p, NULL, NULL)
|
||||
return OBI_Taxon(taxon_capsule, self)
|
||||
|
||||
|
||||
def __len__(self):
|
||||
return self.pointer().taxa.count
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
|
||||
cdef ecotx_t* taxa
|
||||
cdef ecotx_t* taxon_p
|
||||
cdef object taxon_capsule
|
||||
cdef int t
|
||||
|
||||
taxa = self.pointer().taxa.taxon
|
||||
|
||||
# Yield each taxid
|
||||
for t in range(self.pointer().taxa.count):
|
||||
taxon_p = <ecotx_t*> (taxa+t)
|
||||
taxon_capsule = PyCapsule_New(taxon_p, NULL, NULL)
|
||||
yield OBI_Taxon(taxon_capsule, self)
|
||||
|
||||
|
||||
cpdef write(self, str prefix) :
|
||||
if obi_write_taxonomy(self._dms.pointer(), self.pointer(), tobytes(prefix)) < 0 :
|
||||
raise Exception("Error writing the taxonomy to binary files")
|
||||
|
||||
|
||||
cpdef int add_taxon(self, str name, str rank_name, int parent_taxid, int min_taxid=10000000) :
|
||||
cdef int taxid
|
||||
taxid = obi_taxo_add_local_taxon(self.pointer(), tobytes(name), tobytes(rank_name), parent_taxid, min_taxid)
|
||||
if taxid < 0 :
|
||||
raise Exception("Error adding a new taxon to the taxonomy")
|
||||
else :
|
||||
return taxid
|
||||
|
||||
|
||||
cpdef close(self) :
|
||||
|
||||
cdef OBIDMS_taxonomy_p pointer = self.pointer()
|
||||
|
||||
if self.active() :
|
||||
self._dms.unregister(self)
|
||||
OBIWrapper.close(self)
|
||||
if (obi_close_taxonomy(self.pointer()) < 0) :
|
||||
raise Exception("Problem closing the taxonomy %s" %
|
||||
self._name)
|
||||
|
||||
|
||||
# name property getter
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
|
||||
cdef class OBI_Taxon : # TODO dict subclass?
|
||||
|
||||
def __init__(self, object taxon_capsule, OBI_Taxonomy tax) :
|
||||
self._pointer = <ecotx_t*> PyCapsule_GetPointer(taxon_capsule, NULL)
|
||||
if self._pointer == NULL :
|
||||
raise Exception("Error reading a taxon (NULL pointer)")
|
||||
self._tax = tax
|
||||
|
||||
|
||||
# To test equality
|
||||
def __richcmp__(self, OBI_Taxon taxon2, int op):
|
||||
return (self.name == taxon2.name) and \
|
||||
(self.taxid == taxon2.taxid) and \
|
||||
(self.rank == taxon2.rank) and \
|
||||
(self.farest == taxon2.farest) and \
|
||||
(self.parent.taxid == taxon2.parent.taxid) and \
|
||||
(self.preferred_name == taxon2.preferred_name)
|
||||
|
||||
|
||||
# name property getter
|
||||
@property
|
||||
def name(self):
|
||||
return bytes2str(self._pointer.name)
|
||||
|
||||
# taxid property getter
|
||||
@property
|
||||
def taxid(self):
|
||||
return self._pointer.taxid
|
||||
|
||||
# rank property getter
|
||||
@property
|
||||
def rank(self):
|
||||
return self._pointer.rank
|
||||
|
||||
# farest property getter
|
||||
@property
|
||||
def farest(self):
|
||||
return self._pointer.farest
|
||||
|
||||
# parent property getter
|
||||
@property
|
||||
def parent(self):
|
||||
cdef object parent_capsule
|
||||
parent_capsule = PyCapsule_New(self._pointer.parent, NULL, NULL)
|
||||
return OBI_Taxon(parent_capsule, self._tax)
|
||||
|
||||
# preferred name property getter and setter
|
||||
@property
|
||||
def preferred_name(self):
|
||||
if self._pointer.preferred_name != NULL :
|
||||
return bytes2str(self._pointer.preferred_name)
|
||||
|
||||
@preferred_name.setter
|
||||
def preferred_name(self, str new_preferred_name) : # @DuplicatedSignature
|
||||
if (obi_taxo_add_preferred_name_with_taxon(self._tax.pointer(), self._pointer, tobytes(new_preferred_name)) < 0) :
|
||||
raise Exception("Error adding a new preferred name to a taxon")
|
||||
|
||||
def __repr__(self):
|
||||
d = {}
|
||||
d['taxid'] = self.taxid
|
||||
d['name'] = self.name
|
||||
d['rank'] = self.rank
|
||||
d['preferred name'] = self.preferred_name
|
||||
d['parent'] = self.parent.taxid
|
||||
d['farest'] = self.farest
|
||||
return str(d)
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
#from .view import View # @UnresolvedImport
|
||||
#from .view import Line_selection # @UnresolvedImport
|
||||
#from .view import Line # @UnresolvedImport
|
@ -1,8 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..view cimport View
|
||||
|
||||
|
||||
cdef class View_NUC_SEQS(View):
|
||||
pass
|
@ -1,79 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.dms.capi.obiview cimport obi_new_view_nuc_seqs, \
|
||||
obi_new_view_nuc_seqs_cloned_from_name, \
|
||||
VIEW_TYPE_NUC_SEQS
|
||||
|
||||
from ..view cimport register_view_class
|
||||
|
||||
from obitools3.dms.obiseq cimport Nuc_Seq, Nuc_Seq_Stored
|
||||
|
||||
from obitools3.dms.dms cimport DMS
|
||||
|
||||
from obitools3.dms.capi.obitypes cimport index_t
|
||||
|
||||
from obitools3.utils cimport tobytes, bytes2str
|
||||
|
||||
from obitools3.dms.capi.obidms cimport OBIDMS_p
|
||||
|
||||
from obitools3.dms.object cimport OBIWrapper
|
||||
|
||||
|
||||
|
||||
cdef class View_NUC_SEQS(View):
|
||||
|
||||
@staticmethod
|
||||
def new(DMS dms,
|
||||
object view_name,
|
||||
object comments=None,
|
||||
bint quality=False):
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef bytes comments_b
|
||||
cdef str message
|
||||
cdef void* pointer
|
||||
|
||||
cdef View_NUC_SEQS view
|
||||
|
||||
if comments is not None:
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = <void*>obi_new_view_nuc_seqs(<OBIDMS_p>dms._pointer,
|
||||
view_name_b,
|
||||
NULL,
|
||||
NULL,
|
||||
comments_b,
|
||||
quality)
|
||||
|
||||
if pointer == NULL :
|
||||
message = "Error : Cannot create view %s" % bytes2str(view_name_b)
|
||||
raise RuntimeError(message)
|
||||
|
||||
view = OBIWrapper.new(View_NUC_SEQS, pointer)
|
||||
view._dms = dms
|
||||
dms.register(view)
|
||||
|
||||
return view
|
||||
|
||||
|
||||
# TODO
|
||||
def __getitem__(self, object item) :
|
||||
if type(item) == int :
|
||||
return Nuc_Seq_Stored(self, item)
|
||||
else : # TODO assume str or bytes for optimization?
|
||||
return self.get_column(item) # TODO hyper lent dans la pratique
|
||||
|
||||
|
||||
def __setitem__(self, index_t line_idx, Nuc_Seq sequence_obj) :
|
||||
for key in sequence_obj :
|
||||
self[line_idx][key] = sequence_obj[key]
|
||||
|
||||
|
||||
# TODO make properties for id, seq, def columns etc
|
||||
|
||||
|
||||
def register_class() :
|
||||
register_view_class(VIEW_TYPE_NUC_SEQS, View_NUC_SEQS)
|
||||
|
@ -1,65 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from ..capi.obiview cimport Obiview_p
|
||||
|
||||
from ..capi.obitypes cimport index_t, obitype_t
|
||||
|
||||
from ..object cimport OBIWrapper
|
||||
|
||||
from ..dms cimport DMS
|
||||
|
||||
from ..column.column cimport Column
|
||||
|
||||
|
||||
cdef dict __OBIDMS_VIEW_CLASS__
|
||||
|
||||
|
||||
cdef class View(OBIWrapper):
|
||||
|
||||
cdef DMS _dms
|
||||
|
||||
cdef inline Obiview_p pointer(self)
|
||||
|
||||
cpdef delete_column(self,
|
||||
object column_name)
|
||||
|
||||
cpdef rename_column(self,
|
||||
object current_name,
|
||||
object new_name)
|
||||
|
||||
cpdef Column rewrite_column_with_diff_attributes(self,
|
||||
object column_name,
|
||||
obitype_t new_data_type=*,
|
||||
index_t new_nb_elements_per_line=*,
|
||||
list new_elements_names=*)
|
||||
|
||||
cpdef Line_selection new_selection(self,
|
||||
list lines=*)
|
||||
|
||||
@staticmethod
|
||||
cdef type get_view_class(bytes view_type)
|
||||
|
||||
|
||||
cdef class Line_selection(list):
|
||||
|
||||
cdef View _view
|
||||
cdef bytes _view_name
|
||||
|
||||
cdef index_t* __build_binary_list__(self)
|
||||
|
||||
cpdef View materialize(self,
|
||||
object view_name,
|
||||
object comments=*)
|
||||
|
||||
|
||||
cdef class Line :
|
||||
|
||||
cdef index_t _index
|
||||
cdef View _view
|
||||
|
||||
|
||||
cdef register_view_class(bytes view_type_name,
|
||||
type view_class)
|
||||
|
||||
cdef register_all_view_classes()
|
@ -1,556 +0,0 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
cdef dict __VIEW_CLASS__= {}
|
||||
|
||||
|
||||
from libc.stdlib cimport malloc
|
||||
|
||||
from ..capi.obiview cimport Alias_column_pair_p, \
|
||||
obi_new_view, \
|
||||
obi_open_view, \
|
||||
obi_clone_view, \
|
||||
obi_save_and_close_view, \
|
||||
obi_view_get_pointer_on_column_in_view, \
|
||||
obi_view_delete_column, \
|
||||
obi_view_create_column_alias
|
||||
|
||||
from ..capi.obidmscolumn cimport OBIDMS_column_p
|
||||
from ..capi.obidms cimport OBIDMS_p
|
||||
|
||||
from obitools3.utils cimport tobytes, \
|
||||
str2bytes, \
|
||||
bytes2str
|
||||
|
||||
from ..object cimport OBIObjectClosedInstance
|
||||
|
||||
from obitools3.dms.view import typed_view
|
||||
|
||||
from ..capi.obitypes cimport is_a_DNA_seq, \
|
||||
OBI_VOID, \
|
||||
OBI_BOOL, \
|
||||
OBI_CHAR, \
|
||||
OBI_FLOAT, \
|
||||
OBI_INT, \
|
||||
OBI_QUAL, \
|
||||
OBI_SEQ, \
|
||||
OBI_STR
|
||||
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
|
||||
|
||||
cdef class View(OBIWrapper) :
|
||||
|
||||
cdef inline Obiview_p pointer(self) :
|
||||
return <Obiview_p>(self._pointer)
|
||||
|
||||
@staticmethod
|
||||
cdef type get_view_class(bytes view_type):
|
||||
global __VIEW_CLASS__
|
||||
return __VIEW_CLASS__.get(view_type, View)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def new(DMS dms,
|
||||
object view_name,
|
||||
object comments=None):
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef bytes comments_b
|
||||
cdef str message
|
||||
cdef void* pointer
|
||||
|
||||
cdef View view # @DuplicatedSignature
|
||||
|
||||
if comments is not None:
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = <void*>obi_new_view(<OBIDMS_p>dms._pointer,
|
||||
view_name_b,
|
||||
NULL,
|
||||
NULL,
|
||||
comments_b)
|
||||
|
||||
if pointer == NULL :
|
||||
message = "Error : Cannot create view %s" % bytes2str(view_name_b)
|
||||
raise RuntimeError(message)
|
||||
|
||||
view = OBIWrapper.new(View, pointer)
|
||||
view._dms = dms
|
||||
dms.register(view)
|
||||
|
||||
return view
|
||||
|
||||
|
||||
def clone(self,
|
||||
object view_name,
|
||||
object comments=None):
|
||||
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef bytes comments_b
|
||||
cdef void* pointer
|
||||
cdef View view
|
||||
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
if comments is not None:
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = <void*> obi_clone_view(self._dms.pointer(),
|
||||
self.pointer(),
|
||||
view_name_b,
|
||||
NULL,
|
||||
comments_b)
|
||||
|
||||
if pointer == NULL :
|
||||
raise RuntimeError("Error : Cannot clone view %s into view %s"
|
||||
% (str(self.name),
|
||||
bytes2str(view_name_b))
|
||||
)
|
||||
|
||||
view = OBIWrapper.new(type(self), pointer)
|
||||
view._dms = self._dms
|
||||
self._dms.register(view)
|
||||
|
||||
return view
|
||||
|
||||
|
||||
@staticmethod
|
||||
def open(DMS dms, # @ReservedAssignment
|
||||
object view_name):
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef void* pointer
|
||||
cdef View view
|
||||
cdef type view_class
|
||||
|
||||
pointer = <void*> obi_open_view(dms.pointer(),
|
||||
view_name_b)
|
||||
|
||||
if pointer == NULL :
|
||||
raise RuntimeError("Error : Cannot open view %s" % bytes2str(view_name_b))
|
||||
|
||||
view_class = View.get_view_class((<Obiview_p>pointer).infos.view_type)
|
||||
view = OBIWrapper.new(view_class, pointer)
|
||||
|
||||
view._dms = dms
|
||||
dms.register(view)
|
||||
|
||||
return view
|
||||
|
||||
|
||||
cpdef close(self):
|
||||
cdef Obiview_p pointer = self.pointer()
|
||||
|
||||
if self.active() :
|
||||
self._dms.unregister(self)
|
||||
OBIWrapper.close(self)
|
||||
if obi_save_and_close_view(pointer) < 0 :
|
||||
raise Exception("Problem closing view %s" %
|
||||
bytes2str(self.name))
|
||||
|
||||
|
||||
def __repr__(self) :
|
||||
# TODO check everywhere
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
cdef str s = "{name:s}\n{comments:s}\n{line_count:d} lines\n".format(name = str(self.name),
|
||||
comments = str(self.comments),
|
||||
line_count = self.line_count)
|
||||
|
||||
for column_name in self.keys() :
|
||||
s = s + repr(self[column_name]) + '\n'
|
||||
|
||||
return s
|
||||
|
||||
|
||||
def keys(self):
|
||||
cdef int i
|
||||
cdef Obiview_p pointer = self.pointer()
|
||||
cdef int nb_column = pointer.infos.column_count
|
||||
cdef Alias_column_pair_p column_p = pointer.infos.column_references
|
||||
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
for i in range(nb_column) :
|
||||
col_alias = bytes2str(pointer.infos.column_references[i].alias)
|
||||
yield col_alias
|
||||
|
||||
|
||||
def get_column(self,
|
||||
object column_name):
|
||||
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
return Column.open(self, column_name)
|
||||
|
||||
|
||||
cpdef delete_column(self,
|
||||
object column_name) :
|
||||
|
||||
cdef bytes column_name_b = tobytes(column_name)
|
||||
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
# Close the cython instance first
|
||||
col = self[column_name]
|
||||
col.close()
|
||||
|
||||
# Remove the column from the view which closes the C structure
|
||||
if obi_view_delete_column(self.pointer(), column_name_b) < 0 :
|
||||
raise Exception("Problem deleting column %s from a view",
|
||||
bytes2str(column_name_b))
|
||||
|
||||
|
||||
cpdef rename_column(self,
|
||||
object current_name,
|
||||
object new_name):
|
||||
|
||||
cdef Column column
|
||||
cdef bytes current_name_b = tobytes(current_name)
|
||||
cdef bytes new_name_b = tobytes(new_name)
|
||||
|
||||
if not self.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
if (obi_view_create_column_alias(self.pointer(),
|
||||
tobytes(current_name_b),
|
||||
tobytes(new_name_b)) < 0) :
|
||||
raise Exception("Problem in renaming column %s to %s" % (
|
||||
bytes2str(current_name_b),
|
||||
bytes2str(new_name_b)))
|
||||
|
||||
|
||||
# TODO warning, not multithreading compliant
|
||||
cpdef Column rewrite_column_with_diff_attributes(self,
|
||||
object column_name,
|
||||
obitype_t new_data_type=<obitype_t>OBI_VOID,
|
||||
index_t new_nb_elements_per_line=0,
|
||||
list new_elements_names=None) :
|
||||
|
||||
cdef Column old_column
|
||||
cdef Column new_column
|
||||
cdef index_t length = len(self)
|
||||
|
||||
old_column = self.get_column(column_name)
|
||||
|
||||
if new_data_type == 0 :
|
||||
new_data_type = old_column.data_type
|
||||
|
||||
if new_nb_elements_per_line == 0 :
|
||||
new_nb_elements_per_line = old_column.nb_elements_per_line
|
||||
|
||||
if new_elements_names is None :
|
||||
new_elements_names = old_column.elements_names
|
||||
|
||||
new_column = Column.new_column(self, old_column.pointer().header.name, new_data_type,
|
||||
nb_elements_per_line=new_nb_elements_per_line, elements_names=new_elements_names,
|
||||
comments=old_column.comments, alias=tobytes(column_name)+tobytes('___new___'))
|
||||
|
||||
for i in range(length) :
|
||||
new_column[i] = old_column[i]
|
||||
|
||||
# Remove old column from view
|
||||
self.delete_column(column_name)
|
||||
|
||||
# Rename new
|
||||
new_column.name = column_name
|
||||
|
||||
return new_column
|
||||
|
||||
|
||||
cpdef Line_selection new_selection(self,list lines=None):
|
||||
return Line_selection(self, lines)
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
# Iteration on each line of all columns
|
||||
|
||||
# Declarations
|
||||
cdef index_t line_nb
|
||||
cdef Line line
|
||||
|
||||
# Yield each line
|
||||
for line_nb in range(self.line_count) :
|
||||
line = self[line_nb]
|
||||
yield line
|
||||
|
||||
|
||||
def __getitem__(self, object item) :
|
||||
if type(item) == int :
|
||||
return Line(self, item)
|
||||
else : # TODO assume str or bytes for optimization?
|
||||
return self.get_column(item) # TODO hyper lent dans la pratique
|
||||
|
||||
|
||||
def __contains__(self, str column_name):
|
||||
return (column_name in self.keys())
|
||||
|
||||
|
||||
def __len__(self):
|
||||
return(self.line_count)
|
||||
|
||||
|
||||
def __str__(self) :
|
||||
cdef Line line
|
||||
cdef str to_print
|
||||
to_print = ""
|
||||
for line in self :
|
||||
to_print = to_print + str(line) + "\n"
|
||||
return to_print
|
||||
|
||||
|
||||
@property
|
||||
def dms(self):
|
||||
return self._dms
|
||||
|
||||
|
||||
# line_count property getter
|
||||
@property
|
||||
def line_count(self):
|
||||
return self.pointer().infos.line_count
|
||||
|
||||
|
||||
# name property getter
|
||||
@property
|
||||
def name(self):
|
||||
return <bytes> self.pointer().infos.name
|
||||
|
||||
|
||||
# view type property getter
|
||||
@property
|
||||
def type(self): # @ReservedAssignment
|
||||
return <bytes> self.pointer().infos.view_type
|
||||
|
||||
|
||||
# comments property getter
|
||||
@property
|
||||
def comments(self):
|
||||
return <bytes> self.pointer().infos.comments
|
||||
# TODO setter that concatenates new comments?
|
||||
|
||||
|
||||
cdef class Line :
|
||||
|
||||
def __init__(self, View view, index_t line_nb) :
|
||||
self._index = line_nb
|
||||
self._view = view
|
||||
|
||||
|
||||
def __getitem__(self, str column_name) :
|
||||
return (self._view)[column_name][self._index]
|
||||
|
||||
|
||||
def __setitem__(self, str column_name, object value): # TODO discuss
|
||||
# TODO detect multiple elements (dict type)? put somewhere else? but more risky (in get)
|
||||
# TODO OBI_QUAL ?
|
||||
cdef type value_type
|
||||
cdef obitype_t value_obitype
|
||||
cdef bytes value_b
|
||||
|
||||
if column_name not in self._view :
|
||||
if value == None :
|
||||
raise Exception("Trying to create a column from a None value (can't guess type)")
|
||||
value_type = type(value)
|
||||
if value_type == int :
|
||||
value_obitype = OBI_INT
|
||||
elif value_type == float :
|
||||
value_obitype = OBI_FLOAT
|
||||
elif value_type == bool :
|
||||
value_obitype = OBI_BOOL
|
||||
elif value_type == str or value_type == bytes :
|
||||
if value_type == str :
|
||||
value_b = str2bytes(value)
|
||||
else :
|
||||
value_b = value
|
||||
if is_a_DNA_seq(value_b) :
|
||||
value_obitype = OBI_SEQ
|
||||
elif len(value) == 1 :
|
||||
value_obitype = OBI_CHAR
|
||||
elif (len(value) > 1) :
|
||||
value_obitype = OBI_STR
|
||||
else :
|
||||
raise Exception("Could not guess the type of a value to create a new column")
|
||||
|
||||
Column.new_column(self._view, column_name, value_obitype)
|
||||
|
||||
(self._view)[column_name][self._index] = value
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
for column_name in (self._view).keys() :
|
||||
yield self[column_name]
|
||||
|
||||
|
||||
def __contains__(self, str column_name):
|
||||
return (column_name in self._view.keys())
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
cdef dict line
|
||||
cdef str column_name
|
||||
line = {}
|
||||
for column_name in self._view.keys() :
|
||||
line[column_name] = self[column_name]
|
||||
return str(line)
|
||||
|
||||
|
||||
# cpdef dict get_view_infos(self, str view_name) :
|
||||
#
|
||||
# cdef Obiview_infos_p view_infos_p
|
||||
# cdef dict view_infos_d
|
||||
# cdef Alias_column_pair_p column_refs
|
||||
# cdef int i, j
|
||||
# cdef str column_name
|
||||
#
|
||||
# view_infos_p = obi_view_map_file(self._pointer,
|
||||
# tobytes(view_name))
|
||||
# view_infos_d = {}
|
||||
# view_infos_d["name"] = bytes2str(view_infos_p.name)
|
||||
# view_infos_d["comments"] = bytes2str(view_infos_p.comments)
|
||||
# view_infos_d["view_type"] = bytes2str(view_infos_p.view_type)
|
||||
# view_infos_d["column_count"] = <int> view_infos_p.column_count
|
||||
# view_infos_d["line_count"] = <int> view_infos_p.line_count
|
||||
# view_infos_d["created_from"] = bytes2str(view_infos_p.created_from)
|
||||
# view_infos_d["creation_date"] = bytes2str(obi_format_date(view_infos_p.creation_date))
|
||||
# if (view_infos_p.all_lines) :
|
||||
# view_infos_d["line_selection"] = None
|
||||
# else :
|
||||
# view_infos_d["line_selection"] = {}
|
||||
# view_infos_d["line_selection"]["column_name"] = bytes2str((view_infos_p.line_selection).column_name)
|
||||
# view_infos_d["line_selection"]["version"] = <int> (view_infos_p.line_selection).version
|
||||
# view_infos_d["column_references"] = {}
|
||||
# column_references = view_infos_p.column_references
|
||||
# for j in range(view_infos_d["column_count"]) :
|
||||
# column_name = bytes2str((column_references[j]).alias)
|
||||
# view_infos_d["column_references"][column_name] = {}
|
||||
# view_infos_d["column_references"][column_name]["original_name"] = bytes2str((column_references[j]).column_refs.column_name)
|
||||
# view_infos_d["column_references"][column_name]["version"] = (column_references[j]).column_refs.version
|
||||
#
|
||||
# obi_view_unmap_file(self._pointer, view_infos_p)
|
||||
#
|
||||
# return view_infos_d
|
||||
|
||||
|
||||
|
||||
cdef class Line_selection(list):
|
||||
|
||||
def __init__(self, View view, lines=None) :
|
||||
if view._pointer == NULL:
|
||||
raise Exception("Error: trying to create a line selection with an invalidated view")
|
||||
self._view = view
|
||||
self._view_name = view.name
|
||||
|
||||
if lines is not None:
|
||||
self.extend(lines)
|
||||
|
||||
|
||||
def extend(self, iterable):
|
||||
cdef index_t i
|
||||
cdef index_t max_i = self._view.line_count
|
||||
|
||||
for i in iterable: # TODO this is already checked in C
|
||||
if i > max_i:
|
||||
raise RuntimeError("Error: trying to select line %d beyond the line count %d of view %s" %
|
||||
(i,
|
||||
max_i,
|
||||
self._view_name)
|
||||
)
|
||||
list.append(self,i)
|
||||
|
||||
|
||||
def append(self, index_t idx) :
|
||||
if idx >= self._view.line_count :
|
||||
raise IndexError("Error: trying to select line %d beyond the line count %d of view %s" %
|
||||
(idx,
|
||||
self._view.line_count,
|
||||
bytes2str(self.name))
|
||||
)
|
||||
list.append(self,idx)
|
||||
|
||||
|
||||
cdef index_t* __build_binary_list__(self):
|
||||
cdef index_t* line_selection_p = NULL
|
||||
cdef int i
|
||||
cdef size_t l_selection = len(self)
|
||||
|
||||
line_selection_p = <index_t*> malloc((l_selection + 1) * sizeof(index_t)) # +1 for the -1 flagging the end of the array
|
||||
for i in range(l_selection) :
|
||||
line_selection_p[i] = self[i]
|
||||
line_selection_p[l_selection] = -1 # flagging the end of the array
|
||||
|
||||
return line_selection_p
|
||||
|
||||
|
||||
cpdef View materialize(self,
|
||||
object view_name,
|
||||
object comments=""):
|
||||
|
||||
cdef bytes view_name_b = tobytes(view_name)
|
||||
cdef bytes comments_b
|
||||
cdef Obiview_p pointer
|
||||
cdef View view
|
||||
|
||||
if not self._view.active() :
|
||||
raise OBIObjectClosedInstance()
|
||||
|
||||
if comments is not None:
|
||||
comments_b = tobytes(comments)
|
||||
else:
|
||||
comments_b = b''
|
||||
|
||||
pointer = obi_clone_view(self._view._dms.pointer(),
|
||||
self._view.pointer(),
|
||||
view_name_b,
|
||||
self.__build_binary_list__(),
|
||||
comments_b)
|
||||
|
||||
if pointer == NULL :
|
||||
raise RuntimeError("Error : Cannot clone view %s into view %s with new line selection"
|
||||
% (str(self._view.name),
|
||||
bytes2str(view_name_b))
|
||||
)
|
||||
|
||||
view = OBIWrapper.new(type(self._view), pointer)
|
||||
view._dms = self._view._dms
|
||||
view._dms.register(view)
|
||||
|
||||
return view
|
||||
|
||||
|
||||
#############################################################
|
||||
|
||||
|
||||
cdef register_view_class(bytes view_type_name,
|
||||
type view_class):
|
||||
'''
|
||||
Each subclass of `dms.view` needs to be registered after its declaration
|
||||
'''
|
||||
global __VIEW_CLASS__
|
||||
|
||||
assert issubclass(view_class, View)
|
||||
|
||||
__VIEW_CLASS__[view_type_name] = view_class
|
||||
|
||||
|
||||
cdef register_all_view_classes() :
|
||||
|
||||
x = list(pkgutil.walk_packages(typed_view.__path__, prefix="obitools3.dms.view.typed_view."))
|
||||
all_modules = [importlib.import_module(a[1]) for a in x]
|
||||
for mod in all_modules :
|
||||
getattr(mod, 'register_class')()
|
||||
|
||||
|
||||
register_all_view_classes()
|
@ -9,7 +9,6 @@ cdef class MagicKeyFile:
|
||||
cdef int pos
|
||||
|
||||
cpdef bytes read(self,int size=?)
|
||||
cpdef bytes read1(self,int size=?)
|
||||
cpdef int tell(self)
|
||||
|
||||
|
||||
|
@ -54,17 +54,14 @@ cdef class MagicKeyFile:
|
||||
r = self.binary.read(size)
|
||||
|
||||
return r
|
||||
|
||||
cpdef bytes read1(self,int size=-1):
|
||||
return self.read(size)
|
||||
|
||||
|
||||
cpdef int tell(self):
|
||||
cdef int p
|
||||
|
||||
if self.pos < self.keylength:
|
||||
p = self.pos
|
||||
else:
|
||||
p = self.binary.tell()
|
||||
p = self.tell()
|
||||
|
||||
return p
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
from ..utils cimport bytes2str
|
||||
from .header cimport HeaderFormat
|
||||
from cython.view cimport array as cvarray
|
||||
|
||||
cdef class FastaFormat:
|
||||
|
||||
cdef HeaderFormat headerFormater
|
||||
|
||||
cdef size_t sequenceBufferLength
|
||||
cdef char* sequenceBuffer
|
@ -1,30 +0,0 @@
|
||||
cimport cython
|
||||
|
||||
cdef class FastaFormat:
|
||||
|
||||
def __init__(self, list tags=[], bint printNAKeys=False):
|
||||
self.headerFormater = HeaderFormat(True,
|
||||
tags,
|
||||
printNAKeys)
|
||||
|
||||
@cython.boundscheck(False)
|
||||
def __call__(self, dict data):
|
||||
cdef bytes brawseq = data['sequence']
|
||||
cdef size_t lseq = len(brawseq)
|
||||
cdef size_t k=0
|
||||
cdef list lines = []
|
||||
|
||||
for k in range(0,lseq,60):
|
||||
lines.append(brawseq[k:(k+60)])
|
||||
|
||||
brawseq = b'\n'.join(lines)
|
||||
|
||||
return "%s\n%s" % (self.headerFormater(data),bytes2str(brawseq))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,7 +0,0 @@
|
||||
cdef class HeaderFormat:
|
||||
|
||||
cdef str start
|
||||
cdef set tags
|
||||
cdef bint printNaKeys
|
||||
cdef size_t headerBufferLength
|
||||
|
@ -1,60 +0,0 @@
|
||||
|
||||
cdef class HeaderFormat:
|
||||
|
||||
def __init__(self, bint fastaHeader=True, list tags=[], bint printNAKeys=False):
|
||||
'''
|
||||
|
||||
@param fastaHeader:
|
||||
@type fastaHeader: `bool`
|
||||
|
||||
@param tags:
|
||||
@type tags: `list` of `bytes`
|
||||
|
||||
@param printNAKeys:
|
||||
@type printNAKeys: `bool`
|
||||
'''
|
||||
|
||||
self.tags = set(tags)
|
||||
self.printNaKeys = printNAKeys
|
||||
|
||||
if fastaHeader:
|
||||
self.start=">"
|
||||
else:
|
||||
self.start="@"
|
||||
|
||||
self.headerBufferLength = 1000
|
||||
#self.headerBuffer = []
|
||||
|
||||
def __call__(self, dict data):
|
||||
cdef str header
|
||||
cdef dict tags = data['tags']
|
||||
cdef set ktags
|
||||
cdef list lines = [""]
|
||||
cdef str tagline
|
||||
|
||||
if self.tags is not None and self.tags:
|
||||
ktags = self.tags
|
||||
else:
|
||||
ktags = set(tags.keys())
|
||||
|
||||
for k in ktags:
|
||||
if k in tags:
|
||||
value = tags[k]
|
||||
if value is not None or self.printNaKeys:
|
||||
lines.append("%s=%s;" % (k,tags[k]))
|
||||
|
||||
if len(lines) > 1:
|
||||
tagline=" ".join(lines)
|
||||
else:
|
||||
tagline=""
|
||||
|
||||
if data['definition'] is not None:
|
||||
header = "%s%s%s %s" % (self.start,data['id'],
|
||||
tagline,
|
||||
data['definition'])
|
||||
else:
|
||||
header = "%s%s%s" % (self.start,data['id'],
|
||||
tagline)
|
||||
|
||||
return header
|
||||
|
@ -8,12 +8,8 @@
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/hashtable.h
|
||||
../../../src/hashtable.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obi_align.h
|
||||
../../../src/obi_align.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
@ -25,24 +21,8 @@
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_blob.c
|
||||
../../../src/obidmscolumn_blob.h
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_qual.h
|
||||
../../../src/obidmscolumn_qual.c
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
@ -55,11 +35,17 @@
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/sse_banded_LCS_alignment.h
|
||||
../../../src/sse_banded_LCS_alignment.c
|
||||
../../../src/uint8_indexer.h
|
||||
../../../src/uint8_indexer.c
|
||||
../../../src/upperband.h
|
||||
../../../src/upperband.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
93
python/obitools3/obidms/_obidms.pxd
Normal file
93
python/obitools3/obidms/_obidms.pxd
Normal file
@ -0,0 +1,93 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obidms cimport OBIDMS_p
|
||||
from .capi.obidmscolumn cimport OBIDMS_column_p
|
||||
from .capi.obiview cimport Obiview_p
|
||||
from .capi.obitypes cimport obiversion_t, OBIType_t, index_t
|
||||
from ._obitaxo cimport OBI_Taxonomy
|
||||
|
||||
cdef class OBIDMS_column:
|
||||
|
||||
cdef OBIDMS_column_p* pointer
|
||||
cdef OBIDMS dms
|
||||
cdef Obiview_p view
|
||||
cdef str data_type
|
||||
cdef str dms_name
|
||||
cdef str column_name
|
||||
cdef index_t nb_elements_per_line
|
||||
cdef list elements_names
|
||||
|
||||
cpdef update_pointer(self)
|
||||
cpdef list get_elements_names(self)
|
||||
cpdef str get_data_type(self)
|
||||
cpdef index_t get_nb_lines_used(self)
|
||||
cpdef str get_creation_date(self)
|
||||
cpdef str get_comments(self)
|
||||
cpdef close(self)
|
||||
@staticmethod
|
||||
cdef object get_subclass_type(OBIDMS_column_p column_p)
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts(OBIDMS_column):
|
||||
|
||||
cpdef set_line(self, index_t line_nb, dict values)
|
||||
|
||||
|
||||
cdef class OBIDMS_column_line:
|
||||
|
||||
cdef OBIDMS_column column
|
||||
cdef index_t index
|
||||
|
||||
|
||||
cdef class OBIView:
|
||||
|
||||
cdef Obiview_p pointer
|
||||
cdef str name
|
||||
cdef str comments
|
||||
cdef dict columns
|
||||
cdef OBIDMS dms
|
||||
|
||||
cpdef delete_column(self, str column_name)
|
||||
cpdef add_column(self,
|
||||
str column_name,
|
||||
obiversion_t version_number=*,
|
||||
str type=*,
|
||||
index_t nb_lines=*,
|
||||
index_t nb_elements_per_line=*,
|
||||
list elements_names=*,
|
||||
str indexer_name=*,
|
||||
str comments=*,
|
||||
bint create=*
|
||||
)
|
||||
cpdef select_line(self, index_t line_nb)
|
||||
cpdef select_lines(self, list line_selection)
|
||||
cpdef save_and_close(self)
|
||||
|
||||
|
||||
cdef class OBIView_NUC_SEQS(OBIView):
|
||||
|
||||
cdef OBIDMS_column ids
|
||||
cdef OBIDMS_column sequences
|
||||
cdef OBIDMS_column definitions
|
||||
|
||||
cpdef delete_column(self, str column_name)
|
||||
|
||||
|
||||
cdef class OBIView_line :
|
||||
|
||||
cdef index_t index
|
||||
cdef OBIView view
|
||||
|
||||
|
||||
cdef class OBIDMS:
|
||||
|
||||
cdef OBIDMS_p pointer
|
||||
cdef str dms_name
|
||||
|
||||
cpdef close(self)
|
||||
cpdef OBI_Taxonomy open_taxonomy(self, str taxo_name)
|
||||
cpdef OBIView open_view(self, str view_name)
|
||||
cpdef OBIView new_view(self, str view_name, object view_to_clone=*, list line_selection=*, str view_type=*, str comments=*)
|
||||
cpdef dict read_view_infos(self, str view_name)
|
||||
cpdef dict read_views(self)
|
||||
|
693
python/obitools3/obidms/_obidms.pyx
Normal file
693
python/obitools3/obidms/_obidms.pyx
Normal file
@ -0,0 +1,693 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport bytes2str, str2bytes
|
||||
|
||||
from .capi.obidms cimport obi_dms, \
|
||||
obi_close_dms
|
||||
|
||||
from .capi.obidmscolumn cimport obi_close_column, \
|
||||
OBIDMS_column_p, \
|
||||
OBIDMS_column_header_p
|
||||
|
||||
from .capi.obiutils cimport obi_format_date
|
||||
|
||||
from .capi.obitypes cimport const_char_p, \
|
||||
OBIType_t, \
|
||||
OBI_INT, \
|
||||
OBI_FLOAT, \
|
||||
OBI_BOOL, \
|
||||
OBI_CHAR, \
|
||||
OBI_STR, \
|
||||
OBI_SEQ, \
|
||||
name_data_type, \
|
||||
only_ATGC # discuss
|
||||
|
||||
from ._obidms cimport OBIDMS, \
|
||||
OBIDMS_column, \
|
||||
OBIView, \
|
||||
OBIView_line
|
||||
|
||||
from ._obitaxo cimport OBI_Taxonomy
|
||||
|
||||
from ._obiseq cimport OBI_Nuc_Seq, OBI_Nuc_Seq_Stored
|
||||
|
||||
from ._obidmscolumn_int cimport OBIDMS_column_int, \
|
||||
OBIDMS_column_multi_elts_int
|
||||
|
||||
from ._obidmscolumn_float cimport OBIDMS_column_float, \
|
||||
OBIDMS_column_multi_elts_float
|
||||
|
||||
from ._obidmscolumn_bool cimport OBIDMS_column_bool, \
|
||||
OBIDMS_column_multi_elts_bool
|
||||
|
||||
from ._obidmscolumn_char cimport OBIDMS_column_char, \
|
||||
OBIDMS_column_multi_elts_char
|
||||
|
||||
from ._obidmscolumn_str cimport OBIDMS_column_str, \
|
||||
OBIDMS_column_multi_elts_str
|
||||
|
||||
from ._obidmscolumn_seq cimport OBIDMS_column_seq, \
|
||||
OBIDMS_column_multi_elts_seq
|
||||
|
||||
from .capi.obiview cimport Obiview_p, \
|
||||
Obiviews_infos_all_p, \
|
||||
Obiview_infos_p, \
|
||||
Column_reference_p, \
|
||||
obi_new_view_nuc_seqs, \
|
||||
obi_new_view, \
|
||||
obi_new_view_cloned_from_name, \
|
||||
obi_new_view_nuc_seqs_cloned_from_name, \
|
||||
obi_open_view, \
|
||||
obi_read_view_infos, \
|
||||
obi_close_view_infos, \
|
||||
obi_view_delete_column, \
|
||||
obi_view_add_column, \
|
||||
obi_view_get_column, \
|
||||
obi_view_get_pointer_on_column_in_view, \
|
||||
obi_select_line, \
|
||||
obi_select_lines, \
|
||||
obi_save_and_close_view, \
|
||||
VIEW_TYPE_NUC_SEQS, \
|
||||
NUC_SEQUENCE_COLUMN, \
|
||||
ID_COLUMN, \
|
||||
DEFINITION_COLUMN
|
||||
|
||||
from libc.stdlib cimport malloc
|
||||
from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer
|
||||
|
||||
|
||||
cdef class OBIDMS_column :
|
||||
|
||||
# Should only be initialized through a subclass
|
||||
def __init__(self, OBIView view, str column_name):
|
||||
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef OBIDMS_column_p* column_pp
|
||||
|
||||
column_pp = obi_view_get_pointer_on_column_in_view(view.pointer, str2bytes(column_name))
|
||||
column_p = column_pp[0] # TODO ugly cython dereferencing but can't find better
|
||||
|
||||
# Fill structure
|
||||
self.pointer = column_pp
|
||||
self.dms = view.dms
|
||||
self.view = view.pointer
|
||||
self.data_type = bytes2str(name_data_type((column_p.header).returned_data_type))
|
||||
self.column_name = bytes2str((column_p.header).name)
|
||||
self.nb_elements_per_line = (column_p.header).nb_elements_per_line
|
||||
self.elements_names = (bytes2str((column_p.header).elements_names)).split(';')
|
||||
|
||||
def __setitem__(self, index_t line_nb, object value):
|
||||
self.set_line(line_nb, value)
|
||||
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return self.get_line(line_nb)
|
||||
|
||||
def __len__(self):
|
||||
return (self.pointer)[0].header.lines_used
|
||||
|
||||
def __sizeof__(self):
|
||||
return ((self.pointer)[0].header.header_size + (self.pointer)[0].header.data_size)
|
||||
|
||||
def __iter__(self):
|
||||
|
||||
# Declarations
|
||||
cdef index_t lines_used
|
||||
cdef index_t line_nb
|
||||
|
||||
# Yield each line
|
||||
lines_used = (self.pointer)[0].header.lines_used
|
||||
for line_nb in range(lines_used):
|
||||
yield self.get_line(line_nb)
|
||||
|
||||
def __richcmp__(self, object value, int comp):
|
||||
return self.compare(value, comp)
|
||||
|
||||
cpdef update_pointer(self):
|
||||
self.pointer = <OBIDMS_column_p*> obi_view_get_pointer_on_column_in_view(self.view, str2bytes(self.column_name))
|
||||
|
||||
cpdef list get_elements_names(self):
|
||||
return self.elements_names
|
||||
|
||||
cpdef str get_data_type(self):
|
||||
return self.data_type
|
||||
|
||||
cpdef index_t get_nb_lines_used(self):
|
||||
return (self.pointer)[0].header.lines_used
|
||||
|
||||
cpdef str get_creation_date(self):
|
||||
return bytes2str(obi_format_date((self.pointer)[0].header.creation_date))
|
||||
|
||||
cpdef str get_comments(self):
|
||||
return bytes2str((self.pointer)[0].header.comments)
|
||||
|
||||
def __str__(self) :
|
||||
cdef str to_print
|
||||
to_print = ''
|
||||
for line in self :
|
||||
to_print = to_print + str(line) + "\n"
|
||||
return to_print
|
||||
|
||||
def __repr__(self) :
|
||||
return (self.column_name + ", version " + str((self.pointer)[0].header.version) + ", data type: " + self.data_type)
|
||||
|
||||
cpdef close(self):
|
||||
if obi_close_column((self.pointer)[0]) < 0 :
|
||||
raise Exception("Problem closing a column")
|
||||
|
||||
|
||||
@staticmethod
|
||||
cdef object get_subclass_type(OBIDMS_column_p column_p) :
|
||||
|
||||
cdef object subclass
|
||||
cdef OBIDMS_column_header_p header
|
||||
cdef OBIType_t col_type
|
||||
cdef bint col_writable
|
||||
cdef bint col_one_element_per_line
|
||||
|
||||
header = column_p.header
|
||||
col_type = header.returned_data_type
|
||||
col_writable = column_p.writable
|
||||
col_one_element_per_line = ((header.nb_elements_per_line) == 1)
|
||||
|
||||
if col_type == OBI_INT :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_int
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_int
|
||||
elif col_type == OBI_FLOAT :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_float
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_float
|
||||
elif col_type == OBI_BOOL :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_bool
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_bool
|
||||
elif col_type == OBI_CHAR :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_char
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_char
|
||||
elif col_type == OBI_STR :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_str
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_str
|
||||
elif col_type == OBI_SEQ :
|
||||
if col_one_element_per_line :
|
||||
subclass = OBIDMS_column_seq
|
||||
else :
|
||||
subclass = OBIDMS_column_multi_elts_seq
|
||||
else :
|
||||
raise Exception("Problem with the data type")
|
||||
|
||||
return subclass
|
||||
|
||||
|
||||
######################################################################################################
|
||||
|
||||
cdef class OBIDMS_column_multi_elts(OBIDMS_column) :
|
||||
|
||||
def __getitem__(self, index_t line_nb):
|
||||
return OBIDMS_column_line(self, line_nb)
|
||||
|
||||
cpdef set_line(self, index_t line_nb, dict values):
|
||||
for element_name in values :
|
||||
self.set_item(line_nb, element_name, values[element_name])
|
||||
|
||||
######################################################################################################
|
||||
|
||||
cdef class OBIDMS_column_line :
|
||||
|
||||
def __init__(self, OBIDMS_column column, index_t line_nb) :
|
||||
self.index = line_nb
|
||||
self.column = column
|
||||
|
||||
def __getitem__(self, str element_name) :
|
||||
return self.column.get_item(self.index, element_name)
|
||||
|
||||
def __setitem__(self, str element_name, object value):
|
||||
self.column.set_item(self.index, element_name, value)
|
||||
|
||||
def __contains__(self, str element_name):
|
||||
return (element_name in self.column.elements_names)
|
||||
|
||||
def __repr__(self) :
|
||||
return str(self.column.get_line(self.index))
|
||||
|
||||
##########################################
|
||||
|
||||
|
||||
cdef class OBIView :
|
||||
|
||||
def __init__(self, OBIDMS dms, str view_name, bint new=False, object view_to_clone=None, list line_selection=None, str comments=""):
|
||||
|
||||
cdef Obiview_p view = NULL
|
||||
cdef int i
|
||||
cdef list col_list
|
||||
cdef str col_name
|
||||
cdef OBIDMS_column column
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef OBIDMS_column_header_p header
|
||||
cdef index_t* line_selection_p
|
||||
|
||||
self.dms = dms
|
||||
|
||||
# Create the C array for the line selection if needed
|
||||
if line_selection is not None :
|
||||
line_selection_p = <index_t*> malloc((len(line_selection) + 1) * sizeof(index_t))
|
||||
for i in range(len(line_selection)) :
|
||||
line_selection_p[i] = line_selection[i]
|
||||
line_selection_p[len(line_selection)] = -1
|
||||
else :
|
||||
line_selection_p = NULL
|
||||
|
||||
# Create the view if needed
|
||||
if new :
|
||||
if view_to_clone is not None :
|
||||
if type(view_to_clone) == str :
|
||||
view = obi_new_view_cloned_from_name(dms.pointer, str2bytes(view_name), str2bytes(view_to_clone), line_selection_p, str2bytes(comments))
|
||||
else :
|
||||
view = obi_new_view(dms.pointer, str2bytes(view_name), (<OBIView> view_to_clone).pointer, line_selection_p, str2bytes(comments))
|
||||
elif view_to_clone is None :
|
||||
view = obi_new_view(dms.pointer, str2bytes(view_name), NULL, line_selection_p, str2bytes(comments))
|
||||
# Else, open the existing view
|
||||
elif not new :
|
||||
if view_name is not None :
|
||||
view = obi_open_view(dms.pointer, str2bytes(view_name))
|
||||
elif view_name is None :
|
||||
view = obi_open_view(dms.pointer, NULL) # TODO discuss
|
||||
|
||||
if view == NULL :
|
||||
raise Exception("Error creating/opening a view")
|
||||
|
||||
self.pointer = view
|
||||
self.name = bytes2str(view.name)
|
||||
|
||||
# Go through columns to build list of corresponding python instances
|
||||
self.columns = {}
|
||||
for i in range(view.column_count) :
|
||||
column_p = <OBIDMS_column_p> (view.columns)[i]
|
||||
header = (column_p).header
|
||||
col_name = bytes2str(header.name)
|
||||
subclass = OBIDMS_column.get_subclass_type(column_p)
|
||||
self.columns[col_name] = subclass(self, col_name)
|
||||
|
||||
|
||||
def __repr__(self) :
|
||||
|
||||
cdef str s
|
||||
|
||||
s = str(self.name) + ", " + str(self.comments) + ", " + str(self.pointer.line_count) + " lines\n"
|
||||
for column_name in self.columns :
|
||||
s = s + self.columns[column_name].__repr__() + '\n'
|
||||
return s
|
||||
|
||||
|
||||
cpdef delete_column(self, str column_name) :
|
||||
|
||||
cdef int i
|
||||
cdef Obiview_p view
|
||||
cdef OBIDMS_column column
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef OBIDMS_column_header_p header
|
||||
cdef str column_n
|
||||
|
||||
view = self.pointer
|
||||
|
||||
if obi_view_delete_column(view, str2bytes(column_name)) < 0 :
|
||||
raise Exception("Problem deleting a column from a view")
|
||||
|
||||
# Update the dictionaries of column pointers and column objects, and update pointers in column objects (make function?):
|
||||
(self.columns).pop(column_name)
|
||||
|
||||
for column_n in self.columns :
|
||||
(self.columns[column_n]).update_pointer()
|
||||
|
||||
|
||||
cpdef add_column(self,
|
||||
str column_name,
|
||||
obiversion_t version_number=-1,
|
||||
str type='',
|
||||
index_t nb_lines=0,
|
||||
index_t nb_elements_per_line=1,
|
||||
list elements_names=None,
|
||||
str indexer_name="",
|
||||
str comments="",
|
||||
bint create=True
|
||||
) :
|
||||
|
||||
cdef bytes column_name_b
|
||||
cdef bytes elements_names_b
|
||||
cdef object subclass
|
||||
cdef OBIDMS_column_p* column_pp
|
||||
cdef OBIDMS_column_p column_p
|
||||
|
||||
column_name_b = str2bytes(column_name)
|
||||
|
||||
if nb_elements_per_line > 1 :
|
||||
elements_names_b = str2bytes(';'.join(elements_names))
|
||||
elif nb_elements_per_line == 1 :
|
||||
elements_names_b = column_name_b
|
||||
|
||||
if type :
|
||||
if type == 'OBI_INT' :
|
||||
data_type = OBI_INT
|
||||
elif type == 'OBI_FLOAT' :
|
||||
data_type = OBI_FLOAT
|
||||
elif type == 'OBI_BOOL' :
|
||||
data_type = OBI_BOOL
|
||||
elif type == 'OBI_CHAR' :
|
||||
data_type = OBI_CHAR
|
||||
elif type == 'OBI_STR' :
|
||||
data_type = OBI_STR
|
||||
elif type == 'OBI_SEQ' :
|
||||
data_type = OBI_SEQ
|
||||
else :
|
||||
raise Exception("Invalid provided data type")
|
||||
|
||||
if (obi_view_add_column(self.pointer, column_name_b, version_number, # TODO should return pointer on column?
|
||||
data_type, nb_lines, nb_elements_per_line,
|
||||
elements_names_b, str2bytes(indexer_name),
|
||||
str2bytes(comments), create) < 0) :
|
||||
raise Exception("Problem adding a column in a view")
|
||||
|
||||
# Get the column pointer
|
||||
column_pp = obi_view_get_pointer_on_column_in_view(self.pointer, column_name_b)
|
||||
|
||||
# Open and store the subclass
|
||||
column_p = column_pp[0] # TODO ugly cython dereferencing
|
||||
subclass = OBIDMS_column.get_subclass_type(column_p)
|
||||
(self.columns)[column_name] = subclass(self, column_name)
|
||||
|
||||
|
||||
cpdef save_and_close(self) :
|
||||
if (obi_save_and_close_view(self.pointer) < 0) :
|
||||
raise Exception("Problem closing a view")
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
# iter on each line of all columns
|
||||
|
||||
# Declarations
|
||||
cdef index_t lines_used
|
||||
cdef index_t line_nb
|
||||
cdef OBIView_line line # TODO Check that this works for NUC SEQ views
|
||||
|
||||
# Yield each line
|
||||
lines_used = (self.pointer).line_count
|
||||
|
||||
for line_nb in range(lines_used) :
|
||||
line = self[line_nb]
|
||||
yield line
|
||||
|
||||
|
||||
def __getitem__(self, object item) :
|
||||
if type(item) == str :
|
||||
return (self.columns)[item]
|
||||
elif type(item) == int :
|
||||
return OBIView_line(self, item)
|
||||
|
||||
|
||||
cpdef select_line(self, index_t line_nb) :
|
||||
if obi_select_line(self.pointer, line_nb) < 0 :
|
||||
raise Exception("Problem selecting a line")
|
||||
|
||||
|
||||
cpdef select_lines(self, list line_selection) :
|
||||
cdef index_t* line_selection_p
|
||||
line_selection_p = <index_t*> malloc((len(line_selection) + 1) * sizeof(index_t))
|
||||
for i in range(len(line_selection)) :
|
||||
line_selection_p[i] = line_selection[i]
|
||||
line_selection_p[len(line_selection)] = -1
|
||||
if obi_select_lines(self.pointer, line_selection_p) < 0 :
|
||||
raise Exception("Problem selecting a list of lines")
|
||||
|
||||
|
||||
def __contains__(self, str column_name):
|
||||
return (column_name in self.columns)
|
||||
|
||||
|
||||
def __str__(self) :
|
||||
cdef OBIView_line line
|
||||
cdef str to_print
|
||||
to_print = ""
|
||||
for line in self.__iter__() :
|
||||
to_print = to_print + str(line) + "\n"
|
||||
return to_print
|
||||
|
||||
#############################################
|
||||
|
||||
cdef class OBIView_NUC_SEQS(OBIView):
|
||||
|
||||
def __init__(self, OBIDMS dms, str view_name, bint new=False, object view_to_clone=None, list line_selection=None, str comments=""):
|
||||
|
||||
cdef Obiview_p view = NULL
|
||||
cdef int i
|
||||
cdef list col_list
|
||||
cdef str col_name
|
||||
cdef OBIDMS_column column
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef OBIDMS_column_header_p header
|
||||
cdef index_t* line_selection_p
|
||||
|
||||
self.dms = dms
|
||||
|
||||
if line_selection is not None :
|
||||
line_selection_p = <index_t*> malloc((len(line_selection) + 1) * sizeof(index_t))
|
||||
for i in range(len(line_selection)) :
|
||||
line_selection_p[i] = line_selection[i]
|
||||
line_selection_p[len(line_selection)] = -1
|
||||
else :
|
||||
line_selection_p = NULL
|
||||
|
||||
if new :
|
||||
if view_to_clone is not None :
|
||||
if type(view_to_clone) == str :
|
||||
view = obi_new_view_nuc_seqs_cloned_from_name(dms.pointer, str2bytes(view_name), str2bytes(view_to_clone), line_selection_p, str2bytes(comments))
|
||||
else :
|
||||
view = obi_new_view_nuc_seqs(dms.pointer, str2bytes(view_name), (<OBIView> view_to_clone).pointer, line_selection_p, str2bytes(comments))
|
||||
elif view_to_clone is None :
|
||||
view = obi_new_view_nuc_seqs(dms.pointer, str2bytes(view_name), NULL, line_selection_p, str2bytes(comments))
|
||||
elif not new :
|
||||
if view_name is not None :
|
||||
view = obi_open_view(dms.pointer, str2bytes(view_name))
|
||||
elif view_name is None :
|
||||
view = obi_open_view(dms.pointer, NULL)
|
||||
|
||||
if view == NULL :
|
||||
raise Exception("Error creating/opening view")
|
||||
|
||||
self.pointer = view
|
||||
self.name = bytes2str(view.name)
|
||||
self.comments = bytes2str(view.comments)
|
||||
|
||||
# Go through columns to build list of corresponding python instances
|
||||
self.columns = {}
|
||||
for i in range(view.column_count) :
|
||||
column_p = <OBIDMS_column_p> (view.columns)[i]
|
||||
header = (column_p).header
|
||||
col_name = bytes2str(header.name)
|
||||
subclass = OBIDMS_column.get_subclass_type(column_p)
|
||||
self.columns[col_name] = subclass(self, col_name)
|
||||
|
||||
self.ids = self.columns[bytes2str(ID_COLUMN)]
|
||||
self.sequences = self.columns[bytes2str(NUC_SEQUENCE_COLUMN)]
|
||||
self.definitions = self.columns[bytes2str(DEFINITION_COLUMN)]
|
||||
|
||||
|
||||
cpdef delete_column(self, str column_name) :
|
||||
|
||||
cdef int i
|
||||
cdef Obiview_p view
|
||||
cdef OBIDMS_column column
|
||||
cdef OBIDMS_column_p column_p
|
||||
cdef OBIDMS_column_header_p header
|
||||
cdef str column_n
|
||||
|
||||
if ((column_name == bytes2str(ID_COLUMN)) or (column_name == bytes2str(NUC_SEQUENCE_COLUMN)) or (column_name == bytes2str(DEFINITION_COLUMN))) :
|
||||
raise Exception("Can't delete an obligatory column from a NUC_SEQS view")
|
||||
|
||||
view = self.pointer
|
||||
|
||||
if obi_view_delete_column(view, str2bytes(column_name)) < 0 :
|
||||
raise Exception("Problem deleting a column from a view")
|
||||
|
||||
# Remove instance from the dictionary
|
||||
(self.columns).pop(column_name)
|
||||
|
||||
for column_n in self.columns :
|
||||
(self.columns[column_n]).update_pointer()
|
||||
|
||||
|
||||
def __getitem__(self, object item) :
|
||||
if type(item) == str :
|
||||
return (self.columns)[item]
|
||||
elif type(item) == int :
|
||||
return OBI_Nuc_Seq_Stored(self, item)
|
||||
|
||||
|
||||
def __setitem__(self, index_t line_idx, OBI_Nuc_Seq sequence_obj) :
|
||||
for key in sequence_obj :
|
||||
self[line_idx][key] = sequence_obj[key]
|
||||
|
||||
|
||||
#############################################
|
||||
|
||||
cdef class OBIView_line :
|
||||
|
||||
def __init__(self, OBIView view, index_t line_nb) :
|
||||
self.index = line_nb
|
||||
self.view = view
|
||||
|
||||
def __getitem__(self, str column_name) :
|
||||
return ((self.view).columns)[column_name][self.index]
|
||||
|
||||
def __setitem__(self, str column_name, object value):
|
||||
# TODO detect multiple elements (dict type)? put somewhere else? but more risky (in get)
|
||||
cdef type value_type
|
||||
cdef str value_obitype
|
||||
if column_name not in self.view :
|
||||
if value == None :
|
||||
raise Exception("Trying to create a column from a None value (can't guess type)")
|
||||
value_type = type(value)
|
||||
if value_type == int :
|
||||
value_obitype = 'OBI_INT'
|
||||
elif value_type == float :
|
||||
value_obitype = 'OBI_FLOAT'
|
||||
elif value_type == bool :
|
||||
value_obitype = 'OBI_BOOL'
|
||||
elif value_type == str :
|
||||
if only_ATGC(str2bytes(value)) : # TODO detect IUPAC?
|
||||
value_obitype = 'OBI_SEQ'
|
||||
elif len(value) == 1 :
|
||||
value_obitype = 'OBI_CHAR'
|
||||
elif (len(value) > 1) :
|
||||
value_obitype = 'OBI_STR'
|
||||
else :
|
||||
raise Exception("Could not guess the type of a value to create a new column")
|
||||
self.view.add_column(column_name, type=value_obitype)
|
||||
|
||||
(((self.view).columns)[column_name]).set_line(self.index, value)
|
||||
|
||||
def __contains__(self, str column_name):
|
||||
return (column_name in self.view)
|
||||
|
||||
def __repr__(self):
|
||||
cdef dict line
|
||||
cdef str column_name
|
||||
line = {}
|
||||
for column_name in self.view.columns :
|
||||
line[column_name] = self[column_name]
|
||||
return str(line)
|
||||
|
||||
##########################################
|
||||
|
||||
cdef class OBIDMS :
|
||||
|
||||
def __init__(self, str dms_name) :
|
||||
|
||||
# Declarations
|
||||
cdef bytes dms_name_b
|
||||
|
||||
# Format the character string to send to C function
|
||||
dms_name_b = str2bytes(dms_name)
|
||||
|
||||
# Fill structure and create or open the DMS
|
||||
self.dms_name = dms_name
|
||||
self.pointer = obi_dms(<const_char_p> dms_name_b)
|
||||
if self.pointer == NULL :
|
||||
raise Exception("Failed opening or creating an OBIDMS")
|
||||
|
||||
|
||||
cpdef close(self) :
|
||||
if (obi_close_dms(self.pointer)) < 0 :
|
||||
raise Exception("Problem closing an OBIDMS")
|
||||
|
||||
|
||||
cpdef OBI_Taxonomy open_taxonomy(self, str taxo_name) :
|
||||
return OBI_Taxonomy(self, taxo_name)
|
||||
|
||||
|
||||
cpdef OBIView open_view(self, str view_name) :
|
||||
|
||||
cdef object view_class
|
||||
cdef dict view_infos
|
||||
|
||||
view_infos = self.read_view_infos(view_name)
|
||||
|
||||
if view_infos["view_type"] == bytes2str(VIEW_TYPE_NUC_SEQS) :
|
||||
view_class = OBIView_NUC_SEQS
|
||||
else :
|
||||
view_class = OBIView
|
||||
|
||||
return view_class(self, view_name)
|
||||
|
||||
|
||||
cpdef OBIView new_view(self, str view_name, object view_to_clone=None, list line_selection=None, str view_type=None, str comments="") :
|
||||
|
||||
cdef object view_class
|
||||
|
||||
if view_type is not None :
|
||||
if view_type == bytes2str(VIEW_TYPE_NUC_SEQS) :
|
||||
view_class = OBIView_NUC_SEQS
|
||||
else :
|
||||
view_class = OBIView
|
||||
|
||||
return view_class(self, view_name, new=True, view_to_clone=view_to_clone, line_selection=line_selection, comments=comments)
|
||||
|
||||
|
||||
cpdef dict read_view_infos(self, str view_name) :
|
||||
all_views = self.read_views()
|
||||
return all_views[view_name]
|
||||
|
||||
|
||||
cpdef dict read_views(self) : # TODO function that prints the dic nicely and function that prints 1 view nicely. Add column type in col ref
|
||||
|
||||
cdef Obiviews_infos_all_p all_views_p
|
||||
cdef Obiview_infos_p view_p
|
||||
cdef Column_reference_p column_refs
|
||||
cdef int nb_views
|
||||
cdef int i, j
|
||||
cdef str view_name
|
||||
cdef str column_name
|
||||
cdef dict views
|
||||
cdef bytes name_b
|
||||
|
||||
views = {}
|
||||
all_views_p = obi_read_view_infos(self.pointer)
|
||||
if all_views_p == NULL :
|
||||
raise Exception("No views to read")
|
||||
nb_views = <int> (all_views_p.header).view_count
|
||||
for i in range(nb_views) :
|
||||
view_p = (<Obiview_infos_p> (all_views_p.view_infos)) + i
|
||||
view_name = bytes2str(view_p.name)
|
||||
views[view_name] = {}
|
||||
views[view_name]["comments"] = bytes2str(view_p.comments)
|
||||
views[view_name]["view_type"] = bytes2str(view_p.view_type)
|
||||
views[view_name]["column_count"] = <int> view_p.column_count
|
||||
views[view_name]["line_count"] = <int> view_p.line_count
|
||||
views[view_name]["view_number"] = <int> view_p.view_number
|
||||
views[view_name]["created_from"] = bytes2str(view_p.created_from)
|
||||
views[view_name]["creation_date"] = bytes2str(obi_format_date(view_p.creation_date))
|
||||
if (view_p.all_lines) :
|
||||
views[view_name]["line_selection"] = None
|
||||
else :
|
||||
views[view_name]["line_selection"] = {}
|
||||
views[view_name]["line_selection"]["column_name"] = bytes2str((view_p.line_selection).column_name)
|
||||
views[view_name]["line_selection"]["version"] = <int> (view_p.line_selection).version
|
||||
views[view_name]["column_references"] = {}
|
||||
column_refs = view_p.column_references
|
||||
for j in range(views[view_name]["column_count"]) :
|
||||
column_name = bytes2str((column_refs[j]).column_name)
|
||||
views[view_name]["column_references"][column_name] = {}
|
||||
views[view_name]["column_references"][column_name]["version"] = column_refs[j].version
|
||||
|
||||
obi_close_view_infos(all_views_p);
|
||||
|
||||
return views
|
||||
|
||||
|
||||
|
||||
|
51
python/obitools3/obidms/_obidmscolumn_bool.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_bool.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
14
python/obitools3/obidms/_obidmscolumn_bool.pxd
Normal file
14
python/obitools3/obidms/_obidmscolumn_bool.pxd
Normal file
@ -0,0 +1,14 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_bool(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_bool(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
77
python/obitools3/obidms/_obidmscolumn_bool.pyx
Normal file
77
python/obitools3/obidms/_obidmscolumn_bool.pyx
Normal file
@ -0,0 +1,77 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obibool_with_elt_name_in_view, \
|
||||
obi_column_get_obibool_with_elt_idx_in_view, \
|
||||
obi_column_set_obibool_with_elt_name_in_view, \
|
||||
obi_column_set_obibool_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBIBool_NA, obibool_t
|
||||
|
||||
from obitools3.utils cimport str2bytes
|
||||
|
||||
from cpython.bool cimport PyBool_FromLong
|
||||
|
||||
|
||||
cdef class OBIDMS_column_bool(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obibool_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obibool_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIBool_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyBool_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIBool_NA
|
||||
if obi_column_set_obibool_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, <obibool_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_bool(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef obibool_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obibool_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if value == OBIBool_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyBool_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obibool_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obibool_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIBool_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = PyBool_FromLong(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
if value is None :
|
||||
value = OBIBool_NA
|
||||
if obi_column_set_obibool_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), <obibool_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
51
python/obitools3/obidms/_obidmscolumn_char.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_char.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
14
python/obitools3/obidms/_obidmscolumn_char.pxd
Normal file
14
python/obitools3/obidms/_obidmscolumn_char.pxd
Normal file
@ -0,0 +1,14 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_char(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_char(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
76
python/obitools3/obidms/_obidmscolumn_char.pyx
Normal file
76
python/obitools3/obidms/_obidmscolumn_char.pyx
Normal file
@ -0,0 +1,76 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obichar_with_elt_name_in_view, \
|
||||
obi_column_get_obichar_with_elt_idx_in_view, \
|
||||
obi_column_set_obichar_with_elt_name_in_view, \
|
||||
obi_column_set_obichar_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBIChar_NA, obichar_t
|
||||
|
||||
from obitools3.utils cimport str2bytes, bytes2str
|
||||
|
||||
|
||||
cdef class OBIDMS_column_char(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obichar_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIChar_NA :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIChar_NA
|
||||
if obi_column_set_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, str2bytes(value)[0]) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_char(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef obichar_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obichar_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if value == OBIChar_NA :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obichar_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obichar_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIChar_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = bytes2str(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
if value is None :
|
||||
value = OBIChar_NA
|
||||
if obi_column_set_obichar_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), str2bytes(value)[0]) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
51
python/obitools3/obidms/_obidmscolumn_float.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_float.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
15
python/obitools3/obidms/_obidmscolumn_float.pxd
Normal file
15
python/obitools3/obidms/_obidmscolumn_float.pxd
Normal file
@ -0,0 +1,15 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t, obifloat_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_float(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
cpdef list bool_list_from_compare(self, obifloat_t value, int comp)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_float(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
94
python/obitools3/obidms/_obidmscolumn_float.pyx
Normal file
94
python/obitools3/obidms/_obidmscolumn_float.pyx
Normal file
@ -0,0 +1,94 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obifloat_with_elt_name_in_view, \
|
||||
obi_column_get_obifloat_with_elt_idx_in_view, \
|
||||
obi_column_set_obifloat_with_elt_name_in_view, \
|
||||
obi_column_set_obifloat_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBIFloat_NA, obifloat_t, byte_t
|
||||
from .capi.obidmscolumn cimport obi_float_column_greater_than # TODO need to be in view...
|
||||
|
||||
|
||||
from obitools3.utils cimport str2bytes
|
||||
|
||||
|
||||
cdef class OBIDMS_column_float(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obifloat_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obifloat_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIFloat_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <double> value
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIFloat_NA
|
||||
if obi_column_set_obifloat_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, <obifloat_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
cpdef list bool_list_from_compare(self, obifloat_t value, int comp):
|
||||
cdef list result_p
|
||||
cdef byte_t* result_c
|
||||
cdef int i
|
||||
result_p = []
|
||||
if comp == 4 :
|
||||
result_c = obi_float_get_bool_list_from_compare_in_view(self.view, (self.pointer)[0], value, GREATER_THAN)
|
||||
else :
|
||||
raise Exception("Comparison not handled")
|
||||
for i in range(self.get_nb_lines_used()) :
|
||||
result_p.append(<int> result_c[i])
|
||||
print(result_p[i])
|
||||
free(result_c)
|
||||
return result_p
|
||||
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_float(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef obifloat_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obifloat_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if value == OBIFloat_NA :
|
||||
result = None
|
||||
else :
|
||||
result = <double> value
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obifloat_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obifloat_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIFloat_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = <double> value
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
if value is None :
|
||||
value = OBIFloat_NA
|
||||
if obi_column_set_obifloat_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), <obifloat_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
51
python/obitools3/obidms/_obidmscolumn_int.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_int.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
14
python/obitools3/obidms/_obidmscolumn_int.pxd
Normal file
14
python/obitools3/obidms/_obidmscolumn_int.pxd
Normal file
@ -0,0 +1,14 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_int(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_int(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
78
python/obitools3/obidms/_obidmscolumn_int.pyx
Normal file
78
python/obitools3/obidms/_obidmscolumn_int.pyx
Normal file
@ -0,0 +1,78 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obiint_with_elt_name_in_view, \
|
||||
obi_column_get_obiint_with_elt_idx_in_view, \
|
||||
obi_column_set_obiint_with_elt_name_in_view, \
|
||||
obi_column_set_obiint_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBIInt_NA, obiint_t
|
||||
|
||||
from obitools3.utils cimport str2bytes
|
||||
|
||||
from cpython.int cimport PyInt_FromLong
|
||||
|
||||
|
||||
cdef class OBIDMS_column_int(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef obiint_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obiint_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIInt_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyInt_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
if value is None :
|
||||
value = OBIInt_NA
|
||||
if obi_column_set_obiint_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, <obiint_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_int(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef obiint_t value
|
||||
cdef object result
|
||||
value = obi_column_get_obiint_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if value == OBIInt_NA :
|
||||
result = None
|
||||
else :
|
||||
result = PyInt_FromLong(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef obiint_t value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obiint_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if value == OBIInt_NA :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = PyInt_FromLong(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None # TODO discuss
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
if value is None :
|
||||
value = OBIInt_NA
|
||||
if obi_column_set_obiint_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), <obiint_t> value) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
51
python/obitools3/obidms/_obidmscolumn_seq.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_seq.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
14
python/obitools3/obidms/_obidmscolumn_seq.pxd
Normal file
14
python/obitools3/obidms/_obidmscolumn_seq.pxd
Normal file
@ -0,0 +1,14 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_seq(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_seq(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
88
python/obitools3/obidms/_obidmscolumn_seq.pyx
Normal file
88
python/obitools3/obidms/_obidmscolumn_seq.pyx
Normal file
@ -0,0 +1,88 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obiseq_with_elt_name_in_view, \
|
||||
obi_column_get_obiseq_with_elt_idx_in_view, \
|
||||
obi_column_set_obiseq_with_elt_name_in_view, \
|
||||
obi_column_set_obiseq_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBISeq_NA, const_char_p
|
||||
|
||||
from obitools3.utils cimport str2bytes, bytes2str
|
||||
|
||||
from libc.stdlib cimport free
|
||||
from libc.string cimport strcmp
|
||||
|
||||
|
||||
cdef class OBIDMS_column_seq(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef char* value
|
||||
cdef object result
|
||||
value = obi_column_get_obiseq_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if strcmp(value, OBISeq_NA) == 0 :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
free(value)
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef bytes value_b
|
||||
if value is None :
|
||||
value_b = OBISeq_NA
|
||||
else :
|
||||
value_b = str2bytes(value)
|
||||
if obi_column_set_obiseq_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, value_b) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_seq(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef char* value
|
||||
cdef object result
|
||||
value = obi_column_get_obiseq_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if strcmp(value, OBISeq_NA) == 0 :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
free(value)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef char* value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obiseq_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if strcmp(value, OBISeq_NA) == 0 :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = bytes2str(value)
|
||||
free(value)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
cdef bytes value_b
|
||||
if value is None :
|
||||
value_b = OBISeq_NA
|
||||
else :
|
||||
value_b = str2bytes(value)
|
||||
if obi_column_set_obiseq_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), value_b) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
51
python/obitools3/obidms/_obidmscolumn_str.cfiles
Normal file
51
python/obitools3/obidms/_obidmscolumn_str.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
14
python/obitools3/obidms/_obidmscolumn_str.pxd
Normal file
14
python/obitools3/obidms/_obidmscolumn_str.pxd
Normal file
@ -0,0 +1,14 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitypes cimport index_t
|
||||
from ._obidms cimport OBIDMS_column, OBIDMS_column_multi_elts
|
||||
|
||||
|
||||
cdef class OBIDMS_column_str(OBIDMS_column):
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_line(self, index_t line_nb, object value)
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_str(OBIDMS_column_multi_elts):
|
||||
cpdef object get_item(self, index_t line_nb, str element_name)
|
||||
cpdef object get_line(self, index_t line_nb)
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value)
|
87
python/obitools3/obidms/_obidmscolumn_str.pyx
Normal file
87
python/obitools3/obidms/_obidmscolumn_str.pyx
Normal file
@ -0,0 +1,87 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obiview cimport obi_column_get_obistr_with_elt_name_in_view, \
|
||||
obi_column_get_obistr_with_elt_idx_in_view, \
|
||||
obi_column_set_obistr_with_elt_name_in_view, \
|
||||
obi_column_set_obistr_with_elt_idx_in_view
|
||||
from .capi.obierrno cimport obi_errno
|
||||
from .capi.obitypes cimport OBIStr_NA, const_char_p
|
||||
|
||||
from obitools3.utils cimport str2bytes, bytes2str
|
||||
|
||||
from libc.string cimport strcmp
|
||||
|
||||
|
||||
cdef class OBIDMS_column_str(OBIDMS_column):
|
||||
|
||||
cpdef object get_line(self, index_t line_nb):
|
||||
cdef const_char_p value
|
||||
cdef object result
|
||||
value = obi_column_get_obistr_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if strcmp(value, OBIStr_NA) == 0 :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
# NOTE: value is not freed because the pointer points to a mmapped region in an AVL data file. (TODO discuss)
|
||||
return result
|
||||
|
||||
cpdef set_line(self, index_t line_nb, object value):
|
||||
cdef bytes value_b
|
||||
if value is None :
|
||||
value_b = OBIStr_NA
|
||||
else :
|
||||
value_b = str2bytes(value)
|
||||
if obi_column_set_obistr_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, 0, value_b) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
||||
|
||||
cdef class OBIDMS_column_multi_elts_str(OBIDMS_column_multi_elts):
|
||||
|
||||
cpdef object get_item(self, index_t line_nb, str element_name):
|
||||
cdef const_char_p value
|
||||
cdef object result
|
||||
value = obi_column_get_obistr_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name))
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb, element_name)
|
||||
if strcmp(value, OBIStr_NA) == 0 :
|
||||
result = None
|
||||
else :
|
||||
result = bytes2str(value)
|
||||
# NOTE: value is not freed because the pointer points to a mmapped region in an AVL data file. (TODO discuss)
|
||||
return result
|
||||
|
||||
cpdef object get_line(self, index_t line_nb) :
|
||||
cdef const_char_p value
|
||||
cdef object value_in_result
|
||||
cdef dict result
|
||||
cdef index_t i
|
||||
cdef bint all_NA
|
||||
result = {}
|
||||
all_NA = True
|
||||
for i in range(self.nb_elements_per_line) :
|
||||
value = obi_column_get_obistr_with_elt_idx_in_view(self.view, (self.pointer)[0], line_nb, i)
|
||||
if obi_errno > 0 :
|
||||
raise IndexError(line_nb)
|
||||
if strcmp(value, OBIStr_NA) == 0 :
|
||||
value_in_result = None
|
||||
else :
|
||||
value_in_result = bytes2str(value)
|
||||
# NOTE: value is not freed because the pointer points to a mmapped region in an AVL data file. (TODO discuss)
|
||||
result[self.elements_names[i]] = value_in_result
|
||||
if all_NA and (value_in_result is not None) :
|
||||
all_NA = False
|
||||
if all_NA :
|
||||
result = None
|
||||
return result
|
||||
|
||||
cpdef set_item(self, index_t line_nb, str element_name, object value):
|
||||
cdef bytes value_b
|
||||
if value is None :
|
||||
value_b = OBIStr_NA
|
||||
else :
|
||||
value_b = str2bytes(value)
|
||||
if obi_column_set_obistr_with_elt_name_in_view(self.view, (self.pointer)[0], line_nb, str2bytes(element_name), value_b) < 0:
|
||||
raise Exception("Problem setting a value in a column")
|
||||
|
51
python/obitools3/obidms/_obiseq.cfiles
Normal file
51
python/obitools3/obidms/_obiseq.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
30
python/obitools3/obidms/_obiseq.pxd
Normal file
30
python/obitools3/obidms/_obiseq.pxd
Normal file
@ -0,0 +1,30 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from ._obidms cimport OBIView_line
|
||||
|
||||
|
||||
cdef class OBI_Seq(dict) :
|
||||
cdef str id
|
||||
cdef str definition
|
||||
cdef str sequence
|
||||
|
||||
cpdef set_id(self, str id)
|
||||
cpdef get_id(self)
|
||||
cpdef set_definition(self, str definition)
|
||||
cpdef get_definition(self)
|
||||
cpdef get_sequence(self)
|
||||
|
||||
|
||||
cdef class OBI_Nuc_Seq(OBI_Seq) :
|
||||
#cpdef str reverse_complement(self)
|
||||
cpdef set_sequence(self, str sequence)
|
||||
|
||||
|
||||
cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
|
||||
cpdef set_id(self, str id)
|
||||
cpdef get_id(self)
|
||||
cpdef set_definition(self, str definition)
|
||||
cpdef get_definition(self)
|
||||
cpdef set_sequence(self, str sequence)
|
||||
cpdef get_sequence(self)
|
||||
# cpdef str reverse_complement(self)
|
75
python/obitools3/obidms/_obiseq.pyx
Normal file
75
python/obitools3/obidms/_obiseq.pyx
Normal file
@ -0,0 +1,75 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport bytes2str, str2bytes
|
||||
|
||||
from .capi.obiview cimport NUC_SEQUENCE_COLUMN, \
|
||||
ID_COLUMN, \
|
||||
DEFINITION_COLUMN
|
||||
|
||||
cdef class OBI_Seq(dict) :
|
||||
|
||||
def __init__(self, str id, str seq, str definition=None) :
|
||||
self.set_id(id)
|
||||
self.set_sequence(seq)
|
||||
if definition is not None :
|
||||
self.set_definition(definition)
|
||||
|
||||
cpdef set_id(self, str id) :
|
||||
self.id = id
|
||||
self[bytes2str(ID_COLUMN)] = id
|
||||
|
||||
cpdef get_id(self) :
|
||||
return self.id
|
||||
|
||||
cpdef set_definition(self, str definition) :
|
||||
self.definition = definition
|
||||
self[bytes2str(DEFINITION_COLUMN)] = definition
|
||||
|
||||
cpdef get_definition(self) :
|
||||
return self.definition
|
||||
|
||||
cpdef get_sequence(self) :
|
||||
return self.sequence
|
||||
|
||||
def __str__(self) :
|
||||
return self.sequence # or not
|
||||
|
||||
|
||||
cdef class OBI_Nuc_Seq(OBI_Seq) :
|
||||
|
||||
cpdef set_sequence(self, str sequence) :
|
||||
self.sequence = sequence
|
||||
self[bytes2str(NUC_SEQUENCE_COLUMN)] = sequence
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
|
||||
cdef class OBI_Nuc_Seq_Stored(OBIView_line) :
|
||||
|
||||
cpdef set_id(self, str id) :
|
||||
self[bytes2str(ID_COLUMN)] = id
|
||||
|
||||
cpdef get_id(self) :
|
||||
return self[bytes2str(ID_COLUMN)]
|
||||
|
||||
cpdef set_definition(self, str definition) :
|
||||
self[bytes2str(DEFINITION_COLUMN)] = definition
|
||||
|
||||
cpdef get_definition(self) :
|
||||
return self[bytes2str(DEFINITION_COLUMN)]
|
||||
|
||||
cpdef set_sequence(self, str sequence) :
|
||||
self[bytes2str(NUC_SEQUENCE_COLUMN)] = sequence
|
||||
|
||||
cpdef get_sequence(self) :
|
||||
return self[bytes2str(NUC_SEQUENCE_COLUMN)]
|
||||
|
||||
# def __str__(self) :
|
||||
# return self[bytes2str(NUC_SEQUENCE_COLUMN)] # or not
|
||||
|
||||
# cpdef str reverse_complement(self) : TODO in C ?
|
||||
# pass
|
||||
|
||||
# TODO static method to import?
|
||||
|
51
python/obitools3/obidms/_obitaxo.cfiles
Normal file
51
python/obitools3/obidms/_obitaxo.cfiles
Normal file
@ -0,0 +1,51 @@
|
||||
../../../src/bloom.h
|
||||
../../../src/bloom.c
|
||||
../../../src/char_str_indexer.h
|
||||
../../../src/char_str_indexer.c
|
||||
../../../src/crc64.h
|
||||
../../../src/crc64.c
|
||||
../../../src/dna_seq_indexer.h
|
||||
../../../src/dna_seq_indexer.c
|
||||
../../../src/encode.h
|
||||
../../../src/encode.c
|
||||
../../../src/murmurhash2.h
|
||||
../../../src/murmurhash2.c
|
||||
../../../src/obiavl.h
|
||||
../../../src/obiavl.c
|
||||
../../../src/obiblob_indexer.h
|
||||
../../../src/obiblob_indexer.c
|
||||
../../../src/obiblob.h
|
||||
../../../src/obiblob.c
|
||||
../../../src/obidebug.h
|
||||
../../../src/obidms_taxonomy.h
|
||||
../../../src/obidms_taxonomy.c
|
||||
../../../src/obidms.h
|
||||
../../../src/obidms.c
|
||||
../../../src/obidmscolumn_idx.h
|
||||
../../../src/obidmscolumn_idx.c
|
||||
../../../src/obidmscolumn.h
|
||||
../../../src/obidmscolumn.c
|
||||
../../../src/obidmscolumndir.h
|
||||
../../../src/obidmscolumndir.c
|
||||
../../../src/obierrno.h
|
||||
../../../src/obierrno.c
|
||||
../../../src/obilittlebigman.h
|
||||
../../../src/obilittlebigman.c
|
||||
../../../src/obitypes.h
|
||||
../../../src/obitypes.c
|
||||
../../../src/obiview.h
|
||||
../../../src/obiview.c
|
||||
../../../src/utils.h
|
||||
../../../src/utils.c
|
||||
../../../src/obidmscolumn_bool.c
|
||||
../../../src/obidmscolumn_bool.h
|
||||
../../../src/obidmscolumn_char.c
|
||||
../../../src/obidmscolumn_char.h
|
||||
../../../src/obidmscolumn_float.c
|
||||
../../../src/obidmscolumn_float.h
|
||||
../../../src/obidmscolumn_int.c
|
||||
../../../src/obidmscolumn_int.h
|
||||
../../../src/obidmscolumn_seq.c
|
||||
../../../src/obidmscolumn_seq.h
|
||||
../../../src/obidmscolumn_str.c
|
||||
../../../src/obidmscolumn_str.h
|
31
python/obitools3/obidms/_obitaxo.pxd
Normal file
31
python/obitools3/obidms/_obitaxo.pxd
Normal file
@ -0,0 +1,31 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .capi.obitaxonomy cimport ecotx_t, OBIDMS_taxonomy_p
|
||||
|
||||
from libc.stdint cimport int32_t
|
||||
|
||||
|
||||
cdef class OBI_Taxonomy :
|
||||
|
||||
cdef str name
|
||||
cdef OBIDMS_taxonomy_p pointer
|
||||
|
||||
cpdef close(self)
|
||||
|
||||
|
||||
cdef class OBI_Taxon :
|
||||
|
||||
cdef ecotx_t* pointer
|
||||
cdef int32_t taxid
|
||||
cdef int32_t rank
|
||||
cdef int32_t farest
|
||||
cdef ecotx_t* parent
|
||||
cdef str name
|
||||
|
||||
cpdef int32_t taxid(self)
|
||||
|
||||
cpdef int32_t rank(self)
|
||||
|
||||
cpdef int32_t farest(self)
|
||||
|
||||
cpdef OBI_Taxon parent(self)
|
65
python/obitools3/obidms/_obitaxo.pyx
Normal file
65
python/obitools3/obidms/_obitaxo.pyx
Normal file
@ -0,0 +1,65 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from obitools3.utils cimport bytes2str, str2bytes
|
||||
|
||||
from .capi.obitaxonomy cimport obi_read_taxonomy, \
|
||||
obi_close_taxonomy, \
|
||||
obi_taxo_get_taxon_with_taxid
|
||||
|
||||
from ._obidms cimport OBIDMS
|
||||
|
||||
from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer
|
||||
|
||||
|
||||
cdef class OBI_Taxonomy :
|
||||
|
||||
def __init__(self, OBIDMS dms, str name) :
|
||||
|
||||
self.name = name
|
||||
self.pointer = obi_read_taxonomy(dms.pointer, str2bytes(name), True) # TODO discuss
|
||||
|
||||
|
||||
def __getitem__(self, object ref):
|
||||
|
||||
cdef ecotx_t* taxon_p
|
||||
cdef object taxon_capsule
|
||||
|
||||
if type(ref) == int :
|
||||
taxon_p = obi_taxo_get_taxon_with_taxid(self.pointer, ref)
|
||||
taxon_capsule = PyCapsule_New(taxon_p, NULL, NULL)
|
||||
return OBI_Taxon(taxon_capsule)
|
||||
|
||||
|
||||
cpdef close(self) :
|
||||
if (obi_close_taxonomy(self.pointer) < 0) :
|
||||
raise Exception("Error closing the taxonomy")
|
||||
|
||||
|
||||
cdef class OBI_Taxon : # dict subclass?
|
||||
|
||||
def __init__(self, object taxon_capsule) :
|
||||
|
||||
cdef ecotx_t* taxon
|
||||
|
||||
taxon = <ecotx_t*> PyCapsule_GetPointer(taxon_capsule, NULL)
|
||||
self.pointer = taxon
|
||||
self.taxid = taxon.taxid
|
||||
self.rank = taxon.rank
|
||||
self.farest = taxon.farest
|
||||
self.parent = taxon.parent
|
||||
self.name = bytes2str(taxon.name)
|
||||
|
||||
cpdef int32_t taxid(self):
|
||||
return self.taxid
|
||||
|
||||
cpdef int32_t rank(self):
|
||||
return self.rank
|
||||
|
||||
cpdef int32_t farest(self):
|
||||
return self.farest
|
||||
|
||||
cpdef OBI_Taxon parent(self):
|
||||
cdef object parent_capsule
|
||||
parent_capsule = PyCapsule_New(self.parent, NULL, NULL)
|
||||
return OBI_Taxon(parent_capsule)
|
||||
|
12
python/obitools3/obidms/capi/obidms.pxd
Normal file
12
python/obitools3/obidms/capi/obidms.pxd
Normal file
@ -0,0 +1,12 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from .obitypes cimport const_char_p
|
||||
|
||||
cdef extern from "obidms.h" nogil:
|
||||
struct OBIDMS_t:
|
||||
pass
|
||||
|
||||
ctypedef OBIDMS_t* OBIDMS_p
|
||||
|
||||
OBIDMS_p obi_dms(const_char_p dms_name)
|
||||
int obi_close_dms(OBIDMS_p dms)
|
196
python/obitools3/obidms/capi/obidmscolumn.pxd
Normal file
196
python/obitools3/obidms/capi/obidmscolumn.pxd
Normal file
@ -0,0 +1,196 @@
|
||||
#cython: language_level=3
|
||||
|
||||
from ..capi.obidms cimport OBIDMS_p
|
||||
from ..capi.obitypes cimport const_char_p, \
|
||||
OBIType_t, \
|
||||
obiversion_t, \
|
||||
obiint_t, \
|
||||
obibool_t, \
|
||||
obichar_t, \
|
||||
obifloat_t, \
|
||||
index_t, \
|
||||
time_t
|
||||
|
||||
|
||||
cdef extern from "obidmscolumn.h" nogil:
|
||||
|
||||
struct OBIDMS_column_header_t:
|
||||
size_t header_size
|
||||
size_t data_size
|
||||
index_t line_count
|
||||
index_t lines_used
|
||||
index_t nb_elements_per_line
|
||||
const_char_p elements_names
|
||||
OBIType_t returned_data_type
|
||||
OBIType_t stored_data_type
|
||||
time_t creation_date
|
||||
obiversion_t version
|
||||
obiversion_t cloned_from
|
||||
const_char_p name
|
||||
const_char_p indexer_name
|
||||
const_char_p comments
|
||||
|
||||
ctypedef OBIDMS_column_header_t* OBIDMS_column_header_p
|
||||
|
||||
struct OBIDMS_column_t:
|
||||
OBIDMS_p dms
|
||||
OBIDMS_column_header_p header
|
||||
bint writable
|
||||
|
||||
ctypedef OBIDMS_column_t* OBIDMS_column_p
|
||||
|
||||
OBIDMS_column_p obi_create_column(OBIDMS_p dms,
|
||||
const_char_p column_name,
|
||||
OBIType_t type,
|
||||
index_t nb_lines,
|
||||
index_t nb_elements_per_line,
|
||||
const_char_p elements_names,
|
||||
const_char_p indexer_name,
|
||||
const_char_p comments)
|
||||
|
||||
OBIDMS_column_p obi_open_column(OBIDMS_p dms,
|
||||
const_char_p column_name,
|
||||
obiversion_t version_number)
|
||||
|
||||
int obi_close_column(OBIDMS_column_p column)
|
||||
|
||||
OBIDMS_column_p obi_clone_column(OBIDMS_p dms,
|
||||
OBIDMS_column_p line_selection,
|
||||
const_char_p column_name,
|
||||
obiversion_t version_number,
|
||||
bint clone_data)
|
||||
|
||||
int obi_close_column(OBIDMS_column_p column)
|
||||
|
||||
obiversion_t obi_column_get_latest_version_from_name(OBIDMS_p dms,
|
||||
const_char_p column_name)
|
||||
|
||||
OBIDMS_column_header_p obi_column_get_header_from_name(OBIDMS_p dms,
|
||||
const_char_p column_name,
|
||||
obiversion_t version_number)
|
||||
|
||||
int obi_close_header(OBIDMS_column_header_p header)
|
||||
|
||||
int obi_select(OBIDMS_column_p line_selection_column, index_t line_to_grep)
|
||||
|
||||
|
||||
cdef extern from "obidmscolumn_int.h" nogil:
|
||||
|
||||
int obi_column_set_obiint_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obiint_t value)
|
||||
|
||||
int obi_column_set_obiint_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obiint_t value)
|
||||
|
||||
obiint_t obi_column_get_obiint_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obiint_t obi_column_get_obiint_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
cdef extern from "obidmscolumn_bool.h" nogil:
|
||||
|
||||
int obi_column_set_obibool_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obibool_t value)
|
||||
|
||||
int obi_column_set_obibool_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obibool_t value)
|
||||
|
||||
obibool_t obi_column_get_obibool_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obibool_t obi_column_get_obibool_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
cdef extern from "obidmscolumn_char.h" nogil:
|
||||
|
||||
int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obichar_t value)
|
||||
|
||||
int obi_column_set_obichar_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obichar_t value)
|
||||
|
||||
obichar_t obi_column_get_obichar_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obichar_t obi_column_get_obichar_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
cdef extern from "obidmscolumn_float.h" nogil:
|
||||
|
||||
int obi_column_set_obifloat_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obifloat_t value)
|
||||
|
||||
int obi_column_set_obifloat_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obifloat_t value)
|
||||
|
||||
obifloat_t obi_column_get_obifloat_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obifloat_t obi_column_get_obifloat_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
cdef extern from "obidmscolumn_str.h" nogil:
|
||||
|
||||
int obi_column_set_obistr_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
const_char_p value)
|
||||
|
||||
int obi_column_set_obistr_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const_char_p value)
|
||||
|
||||
const_char_p obi_column_get_obistr_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
const_char_p obi_column_get_obistr_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
cdef extern from "obidmscolumn_seq.h" nogil:
|
||||
|
||||
int obi_column_set_obiseq_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
const_char_p value)
|
||||
|
||||
int obi_column_set_obiseq_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const_char_p value)
|
||||
|
||||
char* obi_column_get_obiseq_with_elt_name(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
char* obi_column_get_obiseq_with_elt_idx(OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
5
python/obitools3/obidms/capi/obierrno.pxd
Normal file
5
python/obitools3/obidms/capi/obierrno.pxd
Normal file
@ -0,0 +1,5 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
cdef extern from "obierrno.h" nogil:
|
||||
extern int obi_errno
|
@ -7,38 +7,21 @@ from libc.stdint cimport int32_t
|
||||
|
||||
cdef extern from "obidms_taxonomy.h" nogil:
|
||||
|
||||
struct OBIDMS_taxonomy_t
|
||||
ctypedef OBIDMS_taxonomy_t* OBIDMS_taxonomy_p
|
||||
|
||||
struct ecotxnode :
|
||||
int32_t taxid
|
||||
int32_t rank
|
||||
int32_t farest
|
||||
ecotxnode* parent
|
||||
char* name
|
||||
char* preferred_name
|
||||
|
||||
|
||||
ctypedef ecotxnode ecotx_t
|
||||
|
||||
|
||||
struct ecotxidx_t :
|
||||
int32_t count
|
||||
int32_t max_taxid
|
||||
int32_t buffer_size
|
||||
ecotx_t* taxon
|
||||
|
||||
|
||||
struct OBIDMS_taxonomy_t :
|
||||
# ecorankidx_t* ranks
|
||||
# econameidx_t* names
|
||||
ecotxidx_t* taxa
|
||||
|
||||
ctypedef OBIDMS_taxonomy_t* OBIDMS_taxonomy_p
|
||||
|
||||
|
||||
OBIDMS_taxonomy_p obi_read_taxonomy(OBIDMS_p dms, const_char_p taxonomy_name, bint read_alternative_names)
|
||||
|
||||
OBIDMS_taxonomy_p obi_read_taxdump(const_char_p taxdump)
|
||||
|
||||
int obi_write_taxonomy(OBIDMS_p dms, OBIDMS_taxonomy_p tax, const_char_p tax_name)
|
||||
|
||||
int obi_close_taxonomy(OBIDMS_taxonomy_p taxonomy)
|
||||
|
||||
ecotx_t* obi_taxo_get_parent_at_rank(ecotx_t* taxon, int32_t rankidx)
|
||||
@ -57,9 +40,3 @@ cdef extern from "obidms_taxonomy.h" nogil:
|
||||
|
||||
ecotx_t* obi_taxo_get_superkingdom(ecotx_t* taxon, OBIDMS_taxonomy_p taxonomy)
|
||||
|
||||
int obi_taxo_add_local_taxon(OBIDMS_taxonomy_p tax, const char* name, const char* rank_name, int32_t parent_taxid, int32_t min_taxid)
|
||||
|
||||
int obi_taxo_add_preferred_name_with_taxid(OBIDMS_taxonomy_p tax, int32_t taxid, const char* preferred_name)
|
||||
|
||||
int obi_taxo_add_preferred_name_with_taxon(OBIDMS_taxonomy_p tax, ecotx_t* taxon, const char* preferred_name)
|
||||
|
@ -1,8 +1,7 @@
|
||||
#cython: language_level=3
|
||||
|
||||
|
||||
from libc.stdint cimport int32_t, int64_t, uint8_t
|
||||
|
||||
from libc.stdint cimport int32_t, int64_t
|
||||
from posix.types cimport time_t
|
||||
|
||||
|
||||
@ -12,8 +11,6 @@ cdef extern from *:
|
||||
|
||||
cdef extern from "encode.h" nogil:
|
||||
bint only_ATGC(const_char_p seq)
|
||||
bint only_IUPAC_DNA(const_char_p seq)
|
||||
bint is_a_DNA_seq(const_char_p seq)
|
||||
|
||||
|
||||
cdef extern from "obitypes.h" nogil:
|
||||
@ -24,7 +21,6 @@ cdef extern from "obitypes.h" nogil:
|
||||
OBI_FLOAT,
|
||||
OBI_BOOL,
|
||||
OBI_CHAR,
|
||||
OBI_QUAL,
|
||||
OBI_STR,
|
||||
OBI_SEQ,
|
||||
OBI_IDX
|
||||
@ -50,9 +46,5 @@ cdef extern from "obitypes.h" nogil:
|
||||
extern obibool_t OBIBool_NA
|
||||
extern const_char_p OBISeq_NA
|
||||
extern const_char_p OBIStr_NA
|
||||
extern const_char_p OBIQual_char_NA
|
||||
extern uint8_t* OBIQual_int_NA
|
||||
|
||||
const_char_p name_data_type(int data_type)
|
||||
|
||||
ctypedef OBIType_t obitype_t
|
@ -10,11 +10,7 @@ from .obitypes cimport const_char_p, \
|
||||
index_t, \
|
||||
time_t
|
||||
from ..capi.obidms cimport OBIDMS_p
|
||||
from ..capi.obidmscolumn cimport OBIDMS_column_p, \
|
||||
Column_reference_t, \
|
||||
Column_reference_p
|
||||
|
||||
from libc.stdint cimport uint8_t
|
||||
from ..capi.obidmscolumn cimport OBIDMS_column_p
|
||||
|
||||
|
||||
cdef extern from "obiview.h" nogil:
|
||||
@ -23,17 +19,32 @@ cdef extern from "obiview.h" nogil:
|
||||
extern const_char_p NUC_SEQUENCE_COLUMN
|
||||
extern const_char_p ID_COLUMN
|
||||
extern const_char_p DEFINITION_COLUMN
|
||||
extern const_char_p QUALITY_COLUMN
|
||||
|
||||
struct Obiview_t :
|
||||
OBIDMS_p dms
|
||||
const_char_p name
|
||||
const_char_p created_from
|
||||
const_char_p view_type
|
||||
bint read_only
|
||||
OBIDMS_column_p line_selection
|
||||
OBIDMS_column_p new_line_selection
|
||||
index_t line_count
|
||||
int column_count
|
||||
OBIDMS_column_p columns
|
||||
const_char_p comments
|
||||
|
||||
ctypedef Obiview_t* Obiview_p
|
||||
|
||||
|
||||
struct Alias_column_pair_t :
|
||||
Column_reference_t column_refs
|
||||
const_char_p alias
|
||||
struct Column_reference_t :
|
||||
const_char_p column_name
|
||||
obiversion_t version
|
||||
|
||||
ctypedef Alias_column_pair_t* Alias_column_pair_p
|
||||
ctypedef Column_reference_t* Column_reference_p
|
||||
|
||||
|
||||
struct Obiview_infos_t :
|
||||
int view_number
|
||||
time_t creation_date
|
||||
const_char_p name
|
||||
const_char_p created_from
|
||||
@ -42,257 +53,197 @@ cdef extern from "obiview.h" nogil:
|
||||
Column_reference_t line_selection
|
||||
index_t line_count
|
||||
int column_count
|
||||
Alias_column_pair_p column_references
|
||||
Column_reference_p column_references
|
||||
const_char_p comments
|
||||
|
||||
ctypedef Obiview_infos_t* Obiview_infos_p
|
||||
|
||||
|
||||
struct Obiview_t :
|
||||
Obiview_infos_p infos
|
||||
OBIDMS_p dms
|
||||
bint read_only
|
||||
OBIDMS_column_p line_selection
|
||||
OBIDMS_column_p columns
|
||||
int nb_predicates
|
||||
# TODO declarations for column dictionary and predicate function array?
|
||||
|
||||
ctypedef Obiview_t* Obiview_p
|
||||
struct Obiviews_header_t :
|
||||
size_t header_size
|
||||
size_t views_size
|
||||
int view_count
|
||||
|
||||
ctypedef Obiviews_header_t* Obiviews_header_p
|
||||
|
||||
|
||||
Obiview_p obi_new_view_nuc_seqs(OBIDMS_p dms, const_char_p view_name, Obiview_p view_to_clone, index_t* line_selection, const_char_p comments, bint quality_column)
|
||||
struct Obiviews_infos_all_t :
|
||||
Obiviews_header_p header
|
||||
Obiview_infos_p view_infos
|
||||
|
||||
ctypedef Obiviews_infos_all_t* Obiviews_infos_all_p
|
||||
|
||||
|
||||
Obiview_p obi_new_view_nuc_seqs(OBIDMS_p dms, const_char_p view_name, Obiview_p view_to_clone, index_t* line_selection, const_char_p comments)
|
||||
|
||||
Obiview_p obi_new_view(OBIDMS_p dms, const_char_p view_name, Obiview_p view_to_clone, index_t* line_selection, const_char_p comments)
|
||||
|
||||
Obiview_p obi_new_view_cloned_from_name(OBIDMS_p dms, const_char_p view_name, const_char_p view_to_clone_name, index_t* line_selection, const_char_p comments)
|
||||
|
||||
Obiview_p obi_new_view_nuc_seqs_cloned_from_name(OBIDMS_p dms, const_char_p view_name, const_char_p view_to_clone_name, index_t* line_selection, const_char_p comments)
|
||||
|
||||
Obiview_p obi_clone_view(OBIDMS_p dms, Obiview_p view_to_clone, const char* view_name, index_t* line_selection, const char* comments)
|
||||
|
||||
Obiview_p obi_clone_view_from_name(OBIDMS_p dms, const char* view_to_clone_name, const char* view_name, index_t* line_selection, const char* comments)
|
||||
|
||||
Obiview_infos_p obi_view_map_file(OBIDMS_p dms, const char* view_name, bint finished)
|
||||
|
||||
int obi_view_unmap_file(OBIDMS_p dms, Obiview_infos_p view_infos)
|
||||
|
||||
|
||||
Obiview_p obi_open_view(OBIDMS_p dms, const_char_p view_name)
|
||||
|
||||
int obi_view_add_column(Obiview_p view,
|
||||
const_char_p column_name,
|
||||
obiversion_t version_number,
|
||||
const_char_p alias,
|
||||
OBIType_t data_type,
|
||||
index_t nb_lines,
|
||||
index_t nb_elements_per_line,
|
||||
char* elements_names,
|
||||
const_char_p elements_names,
|
||||
const_char_p indexer_name,
|
||||
const_char_p associated_column_name,
|
||||
obiversion_t associated_column_version,
|
||||
const_char_p comments,
|
||||
bint create)
|
||||
|
||||
int obi_view_delete_column(Obiview_p view, const_char_p column_name)
|
||||
|
||||
|
||||
int obi_select_line(Obiview_p view, index_t line_nb)
|
||||
|
||||
int obi_select_lines(Obiview_p view, index_t* line_nbs)
|
||||
|
||||
OBIDMS_column_p obi_view_get_column(Obiview_p view, const_char_p column_name)
|
||||
|
||||
OBIDMS_column_p* obi_view_get_pointer_on_column_in_view(Obiview_p view, const_char_p column_name)
|
||||
|
||||
int obi_view_create_column_alias(Obiview_p view, const_char_p current_name, const_char_p alias)
|
||||
int obi_save_view(Obiview_p view)
|
||||
|
||||
int obi_close_view(Obiview_p view)
|
||||
|
||||
int obi_save_and_close_view(Obiview_p view)
|
||||
|
||||
Obiviews_infos_all_p obi_read_view_infos(OBIDMS_p dms)
|
||||
|
||||
int obi_close_view_infos(Obiviews_infos_all_p views)
|
||||
|
||||
# OBI_INT
|
||||
int obi_set_int_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obiint_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obiint_t value)
|
||||
|
||||
int obi_set_int_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obiint_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obiint_t value)
|
||||
|
||||
obiint_t obi_get_int_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obiint_t obi_column_get_obiint_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obiint_t obi_get_int_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obiint_t obi_column_get_obiint_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
|
||||
# OBI_BOOL
|
||||
int obi_set_bool_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obibool_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obibool_t value)
|
||||
|
||||
int obi_set_bool_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obibool_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obibool_t value)
|
||||
|
||||
obibool_t obi_get_bool_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obibool_t obi_column_get_obibool_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obibool_t obi_get_bool_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obibool_t obi_column_get_obibool_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
|
||||
# OBI_CHAR
|
||||
int obi_set_char_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obichar_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obichar_t value)
|
||||
|
||||
int obi_set_char_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obichar_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obichar_t value)
|
||||
|
||||
obichar_t obi_get_char_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obichar_t obi_column_get_obichar_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obichar_t obi_get_char_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obichar_t obi_column_get_obichar_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
|
||||
# OBI_FLOAT
|
||||
int obi_set_float_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obifloat_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
obifloat_t value)
|
||||
|
||||
int obi_set_float_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obifloat_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
obifloat_t value)
|
||||
|
||||
obifloat_t obi_get_float_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obifloat_t obi_column_get_obifloat_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
obifloat_t obi_get_float_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
obifloat_t obi_column_get_obifloat_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
|
||||
# OBI_QUAL
|
||||
int obi_set_qual_char_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const char* value)
|
||||
|
||||
int obi_set_qual_int_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const uint8_t* value,
|
||||
int value_length)
|
||||
|
||||
char* obi_get_qual_char_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
const uint8_t* obi_get_qual_int_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
int* value_length)
|
||||
|
||||
int obi_set_qual_char_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
const char* element_name,
|
||||
const char* value)
|
||||
|
||||
int obi_set_qual_int_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
const char* element_name,
|
||||
const uint8_t* value,
|
||||
int value_length)
|
||||
|
||||
char* obi_get_qual_char_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
const char* element_name)
|
||||
|
||||
const uint8_t* obi_get_qual_int_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
index_t line_nb,
|
||||
const char* element_name,
|
||||
int* value_length)
|
||||
|
||||
|
||||
# OBI_STR
|
||||
int obi_set_str_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obistr_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
const_char_p value)
|
||||
|
||||
int obi_set_str_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obistr_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const_char_p value)
|
||||
|
||||
const_char_p obi_get_str_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
const_char_p obi_column_get_obistr_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
const_char_p obi_get_str_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
const_char_p obi_column_get_obistr_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
||||
|
||||
# OBI_SEQ
|
||||
int obi_set_seq_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obiseq_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name,
|
||||
const_char_p value)
|
||||
|
||||
int obi_set_seq_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
int obi_column_set_obiseq_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx,
|
||||
const_char_p value)
|
||||
|
||||
char* obi_get_seq_with_elt_name_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
char* obi_column_get_obiseq_with_elt_name_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
const_char_p element_name)
|
||||
|
||||
char* obi_get_seq_with_elt_idx_and_col_p_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column_p,
|
||||
char* obi_column_get_obiseq_with_elt_idx_in_view(Obiview_p view,
|
||||
OBIDMS_column_p column,
|
||||
index_t line_nb,
|
||||
index_t element_idx)
|
||||
|
51
python/obitools3/obigrep.py
Normal file
51
python/obitools3/obigrep.py
Normal file
@ -0,0 +1,51 @@
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
from obitools3.obidms._obidms import OBIDMS
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
parser = argparse.ArgumentParser(description='Pseudo obigrep.')
|
||||
|
||||
parser.add_argument('-V', '--view', dest='view', type=str,
|
||||
help='Name of the view that should be considered')
|
||||
|
||||
parser.add_argument('-N', '--new_view', dest='new_view', type=str,
|
||||
help='Name of the new view that should be created')
|
||||
|
||||
# parser.add_argument('-k', '--key', dest='key', type=str,
|
||||
# help='Name of the key that should be considered')
|
||||
#
|
||||
# parser.add_argument('-c', '--comp', dest='comparison', type=int,
|
||||
# help='Comparison to be made: -1:< ; 0:== ; 1:>')
|
||||
#
|
||||
# parser.add_argument('-v', '--value', dest='value', type=object,
|
||||
# help='Value to be compared')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
d = OBIDMS('tdms')
|
||||
|
||||
#condition = 1
|
||||
line_selec = []
|
||||
|
||||
v = d.open_view(args.view)
|
||||
|
||||
i = 0
|
||||
for l in v :
|
||||
if l['score'] > 350 :
|
||||
line_selec.append(i)
|
||||
i+=1
|
||||
|
||||
new_v = d.new_view(args.new_view, view_to_clone=v, line_selection=line_selec, view_type="NUC_SEQS_VIEW", comments="obigrep "+args.view+" to "+args.new_view) #args.key+" "+str(args.comparison)+" "+str(args.value)+" "+)
|
||||
|
||||
print("\n")
|
||||
print(new_v.__repr__())
|
||||
|
||||
v.save_and_close()
|
||||
new_v.save_and_close()
|
||||
|
||||
d.close()
|
||||
|
||||
print("\nDone.")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user